gnuplotのカラーマップ

配色(pm3dの色)について
gnuplot ver4.6で確かめています。

一番良いと思ったカラーマップは、matlabで使われている”jet”だと感じました。

set palette defined ( 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

colorjet
参考:Matlab colorbar with Gnuplot

※一番下に黒または白を追加した以下の物も良いと思います。

set palette defined ( -1 '#000030', 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

set palette defined ( -1 '#ffffff', 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

※正負をはっきりと見せたい時。

set palette defined ( 0 '#0fffee',1 '#0090ff', 2 '#000fff',3 '#000090',4 '#ffffff',5 '#7f0000', 6 '#ee0000', 7 '#ff7000', 8 '#ffee00')

set palette defined ( 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#ffffff',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

追記)2023/01/13
matlabでは、最近parulaというカラーマップが採用されているようです。

set palette defined ( 0 '#352a87',1 '#2053d4',2 '#0d75dc',3 '#0c93d2',4 '#07a9c2',5 '#38b99e',6 '#7cbf7b',7 '#b7bd64',8 '#f1b94a',9 '#fad32a',10 '#f9fb0e')

グレースケールにした時にも画像を変更する必要もなく、このままで綺麗に出るようです。
また、\(f(x,y)=\sin(xy)\)をjetと比較してみましょう。

グレースケールとした場合は、以下のようになります。

確かにparulaの方が高い低いがはっきりと分かります。

カラーの場合は偏りが生じないjetの方が綺麗ですかね?
しかし、parulaの方が柔らかな印象です。
グレースケールで印刷されることが予想されるならば、parulaの方がいいですね。
印象が大きく変わるかと思います。好きな方をご使用ください。


配色について。
gnuplotでは色の指定方法として3種類あるそうです((2),(3),(4))。

お勧めのカラーの指定順に,
(1)外部サイトgnuplottingにあるカラーマップを利用する
(2)cubehelixで指定する
(3)definedで指定する
(4)rgbformulaeで指定する

方法を紹介します。

(1)gnuplottingにあるカラーマップの利用


一番早く、綺麗なカラーマップを得るためには”gnuplotting(http://www.gnuplotting.org/)”という外部サイトに紹介されているgnuplotのカラーマップを使うことです。
ここに紹介されているカラーマップは、https://github.com/Gnuplotting/gnuplot-palettesより画像を引用して、
overview((c)gnuplotting)です。

使い方
  1. Gnuplotting/gnuplot-palettes -githubに飛びます。
  2. 右上にある “Clone or download” をクリックしてすべてのファイルをダウンロード
  3. カラーマップを見て使いたい名前の “***.pal” ファイルをgnuplot上でload
    で使えます。線の色なども上書きされるので、もしも線の色だけを変えたければ、linestyleなどで変更する必要があります。

(2)cubehelixで指定する


gnuplot version4.6以上

set palette cubehelix start 0.5 cycles -1.5 saturation 1

この色の指定方法はD.A.Greenによって発表された、宇宙の、強度イメージを色付けするために作られた色の指定方法です[1]。

それぞれのパラメータが何を表すかは折りたたんでおきますので、気になる方は下のリンクを開いてください。

[adsense1]

cubehelixでの具体例

対象とするデータは、水素原子の(n,l,m)=(4,2,0)の解析解です。
※このデータが欲しい方はこちらHydrogen_xz_nlm420.txt(1.5MB)に置きましたので、コピペしてください。
Ctrl+aで全選択できます。

3Dの表示ではこういうグラフです。
hydrogennlm420

特に記述が無いものはgammaの値はデフォルトの1.5です。

1.hydro420_s0.5c-1.5s1g1.5_c

set palette cubehelix start 0.5 cycles -1.5 saturation 1

きちんとした裏付けの下カラーリングされているので、論文等々にお勧めです。


2.hydro420_s0.5c-1s3g1.5_c

set palette cubehelix start 0.5 cycles -1 saturation 3

もしくは

 set palette defined(0"#000000",1"#5b13b8",2"#1c60ff",3"#00b7d8",4"#01eb75",5"#55f02e",6"#ccd73b",7"#ffc68c",8"#ffd5e2",9"#ffffff")

3.hydro420_s0.5c-1s3g3_c

set palette cubehelix start 0.5 cycles -1 saturation 3
set palette gamma 3

もしくは↑に近い色で

set palette defined(0"#000000",0.1"#8e007a",2.1"#579dff",3.1"#2de4ff",4.1"#4bffab",5.1"#98fe7d",6.1"#e4eb8c",7.1"#ffe1c0",8.1"#ffe9f0",9.1"#ffffff")

4.hydro420_s1c0s2g1.5_c

set palette cubehelix start 1 cycles 0 saturation 2

5.hydro420_s2c0s3g1.5_c

set palette cubehelix start 2 cycles 0 saturation 3

6.hydro420_s2c1s2g1.5_c

set palette cubehelix start 2 cycles 1 saturation 2

7.hydro420_s3c0.5s3g1.5_c

set palette cubehelix start 3 cycles 0.5 saturation 3

8.hydro420_s1c5s3g1.5_c

set palette cubehelix start 1 cycles 5 saturation 3

9.hydro420_s1c0s2g1.5neg_c

set palette cubehelix start 1 cycles 0 saturation 2 negative

10.hydro420_s1c-1s2g1.5neg_c

set palette cubehelix start 1 cycles -1 saturation 2 negative

11.hydro420_s3c0.5s1g1.5neg_c

set palette cubehelix start 3 cycles 0.5 saturation 1 negative

12.hydro420_s3c-2s2g1.5neg_c

set palette cubehelix start 3 cycles -2 saturation 2 negative

13.hydro420_s1c5s3g1.5neg_c

set palette cubehelix start 1 cycles 5 saturation 3 negative

82.54.4 Cubehelix

(3)definedで指定する

set palette defined(-3"blue",0"white",5"red",10"yellow")

z軸が-3になったとき青色(blue)、0になったとき白(white),5になったとき赤(red)、10になったとき黄色 (yellow・になるような配色です。
zの範囲が-50 < z < 100だった場合は-3,0,5,10の比で表されます。
すなわち、z=-50で青、z=-16付近で白、z=42付近で赤、z=100で黄色となるように自動的に調整されます。
色は有名な色は上の例のように言葉で記述できますが、16進数のカラーコードによる表示もできます。

カラーマップ例

カラーマップ例を載せます。


set palette defined ( 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

matlabで使われている”jet”のカラーマップです。
colorjet
参考:Matlab colorbar with Gnuplot

set palette defined(0"#ff0000",1"#ff8000",2"#ffff00",3"#80ff00",4"#00ff00",5"#00ff80",6"#00ffff",7"#0080ff",8"#0000ff",9"#8000ff",10"#ff00ff",11"#ff0080",12"#ff0000")

cyclic_c
色は色相環を元に作っています。
周期的な関数を出力するときに役に立ちます。例えば、リーマン面を角度に依存させて表示する際などに利用すると良いです。こんなように。
Riemann_angle


set palette defined(1"#0000ff",2"#0080ff",3"#00ffff",4"#00ff80",5"#00ff00",6"#80ff00",7"#ffff00",8"#ff8000",9"#ff0000")

cl2_c
色相環を元に作成したものです。


set palette defined (-9 "purple",-6 "blue",-3 "turquoise", 0 "#f5f5f5", 3 "gold", 6 "orange", 9 "red")

cwhite
※匿名希望さん提供


set palette defined(0"#ffffff",0.8"#00008b",1.8"#2ca9e1",3"#008000",4.2"#ffff00",5"#eb6101",5.5"#8b0000")

カラフルtr_c
白⇒青⇒水色⇒黄色⇒オレンジ⇒赤
細かい変化を見たい時にいい感じになります。


set palette defined(0"#000000",1"#0000ff",2"#1e90ff",3"#00ffff")

黒から青tr_c
黒⇒青⇒明るい青
不連続な関数を表示させる時にこのマップを使うといい感じになります。


set palette defined(0"#ffffff",1"#0000ff",2"#ff0000",3"#ffff00")

白青黄tr_c
白⇒青⇒赤⇒黄
上の2つが気に入らなかったりした時に。


set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")

カラフルatr_c
青⇒水色⇒黄色⇒オレンジ⇒赤
一番下が白じゃないほうがいいときに。

(4) rgbformulaeで指定する

set palette rgbformulae 33,13,10

”set palette rgbformulae” のあとの3つの整数で赤(R)/緑(G)/青(B)に対応しています。
整数で赤、緑、青をどのような変化具合をさせるのかということを指定します。
直線的に色を変化させるのか、2次、3次関数的なのかはたまたsin,cos的なのかを。どういった整数を使えばどういう関数に相当するのか?
これを知るには gnuplot上で
”show palette rgbformulae”
と打ってください。gnuplot ver.4.6では、以下の画像のように出力されます。
rgbformulae_c
0~36まで出てきます。指定は-36~36までできます。負の値は反転することを意味しています。

また、いくつかのrgbformulaeを使った例が ”help palette rgbformulae” で見れます。実際に入力するとこんな感じ。
helprgb_c
helpで現れるカラーマップはこんな感じです。
rgbformulae_help_c

また、今使っているカラーマップをrgbformulaeで記述をしたい場合、

show palette fit2rgbformulae

とやれば、今使っているカラーマップをrgbformulaeで表示する場合の3つの数字を出してくれます。
あくまで似た図です。

デフォルトのカラーマップを変更する

デフォルトのカラーマップを変更するには、ホームディレクトリにて、
.gnuplot
という名前のファイルを作り、その中に

set palette defined(0"#ffffff",0.8"#00008b",1.8"#2ca9e1",3"#008000",4.2"#ffff00",5"#eb6101",5.5"#8b0000")

と記述します。これでデフォルトのカラーマップが変更されます。

ちなみに、僕が使っている.gnuplotファイルは以下のものです。

set terminal wxt dashed noraise enhanced font 'Times New Roman,20'

#matlab jet
#set palette defined ( 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

set palette defined ( -1 '#ffffff', 0 '#000090',1 '#000fff',2 '#0090ff',3 '#0fffee',4 '#90ff70',5 '#ffee00',6 '#ff7000',7 '#ee0000',8 '#7f0000')

set linetype  1 lc rgb "black" lw 1
set linetype  2 lc rgb "red" lw 1
set linetype  3 lc rgb "blue" lw 1
set linetype  4 lc rgb "forest-green"
set linetype  5 lc rgb "magenta" lw 1
set linetype  6 lc rgb "#FFD900" lw 1
set linetype  7 lc rgb "cyan" lw 1
set linetype  8 lc rgb "#7F00FF" lw 1
set linetype  9 lc rgb "#FF7F00" lw 1
set linetype  10 lc rgb "#00FF7F" lw 1
set linetype  11 lc rgb "gray" lw 1
set linetype  12 lc rgb "gray40" lw 1

上の設定を適応すると、カラーマップはjetに黒を追加したもの、線は以下のようになります。

配色のあれこれ、gnuplot demoより。
カラフルに塗りたい http://gnuplot.sourceforge.net/demo/pm3dcolors.html
モノクロに塗りたい http://gnuplot.sourceforge.net/demo/pm3dgamma.html
点に色をつけたい http://gnuplot.sourceforge.net/demo/rgb_variable.html
線に色をつけたい http://gnuplot.sourceforge.net/demo/rainbow.html

http://ayapin-film.sakura.ne.jp/Gnuplot/Primer/Misc/colormap.html

[1]D. A. Green(2011), ‘A colour scheme for the display of astronomical intensity images’, Bulletin of the Astronomical Society of India, 39, 289.(2011BASI…39..289G at ADS.)

またDave Green’s `cubehelix’ colour schemeをご覧下さい。

[adsense2]


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です