読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

set palette define で自分の好きなカラーテーブルを作成する

gnuplot の pm3d でカラーテーブルを変更する方法

【Proton.jp】 Gnuplotのグラフを調節するには

上記リンクで『pm3d のカラーバーを設定する』を参照のこと. gnuplotサーフェスに色を付けてマップ表示するためには

set pm3d map                  # map をつけると上から見下ろした図になる
splot [-2:2] [-2:2] sin(x*y)

とすればよい.カラーバーの範囲を変えたければ set cbrange [min:max] でできる.カラーバーの色を変えたければパレットを変更する必要がある.パレットを変更するには set palette を使えばよい.

set palette rgbformulae -36,0,36
splot [-2:2] [-2:2] sin(x*y)

この rgbformulae に与える引数は少々ややこしい.引数はそれぞれ r,g,b に対応しているのだけど各数字は gnuplot 内部で指定された関数に対応している.なので関数の仕様を知っていれば自在にカラーテーブルを操れる(かもしれない)がいちいち覚えておくのはツライ.そこで冒頭のリンク先では自分で指定したカラーテーブルを模した rgbformulae のパラメタを計算してくれるツールを紹介してくれているのだけどリンクが切れておりアクセスできない.Internet Archive Wayback Machine にてアーカイヴを検索したところ公式で実装されたので閉鎖したらしい.

set palette define

gnuplot help を読んだところによると set palette define にてパレットを指定して show palette fit2rgbformulae で rgbformulae の引数をゲットできるらしい.でもよく考えると set palette define するだけでことは足りている気がする.というわけでここでは set palette define の使い方についてメモしておく.

画像は左から順に以下のカラーテーブルに対応している.それぞれの設定はその下に記述してある.

  1. デフォルトのカラーテーブル
  2. モノクロのカラーテーブル
  3. 黄色を加えた 3 色のカラーテーブル
  4. コントラストを変えたモノクロのカラーテーブル
  5. 10 色使っためちゃくちゃなカラーテーブル
デフォルトのカラーテーブルでプロット
set xr [-4*atan(1):4*atan(1)]; set yr [-4*atan(1):4*atan(1)];
set terminal wxt enhanced; set pm3d map; set size square;
splot cos(x**2+y**2) t "cos(x^2+y^2)"
モノクロのカラーテーブルに変更
set palette define (0 "black", 1 "white"); rep
黄色を加えた 3 色のカラーテーブルに変更
set palette define (0 "black", 1 "yellow", 2 "white"); rep
コントラストを変えたモノクロのカラーテーブルに変更
set palette define (0 "black", 9 "gray20", 10 "white"); rep
めちゃくちゃなカラーテーブルに変更
set palette define \
   (0 "black", 1 "yellow", 2 "light-green", 3 "light-blue",4 "coral", \
    5 "gold", 6 "navy", 7 "purple", 8 "turquoise", 9 "red", 10 "white"); rep
show palette fit2rgbfomulae

rgbfomulae に与えるための引数を得たければ自分が使いたいカラーテーブルに変更したあとで show palette fit2rgbformulae を実行すればよい.例えば 1. のモノクロのカラーテーブルであれば以下のような結果が得られるはず.なお,これは現在のカラーテーブルを rgbformulae の引数で近似するためのコマンドなので,例えば 10 色使っためちゃくちゃなカラーテーブルでは再現するような引数の組み合わせが存在しないので意味のある値は返ってこない.

The best match of the current palette corresponds to
    set palette rgbformulae 3,3,3