配色(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')
参考: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より画像を引用して、
((c)gnuplotting)です。
使い方
- Gnuplotting/gnuplot-palettes -githubに飛びます。
- 右上にある “Clone or download” をクリックしてすべてのファイルをダウンロード
- カラーマップを見て使いたい名前の “***.pal” ファイルをgnuplot上でload
で使えます。線の色なども上書きされるので、もしも線の色だけを変えたければ、linestyleなどで変更する必要があります。
(2)cubehelixで指定する
gnuplot version4.6以上
set palette cubehelix start 0.5 cycles -1.5 saturation 1
この色の指定方法はD.A.Greenによって発表された、宇宙の、強度イメージを色付けするために作られた色の指定方法です[1]。
それぞれのパラメータが何を表すかは折りたたんでおきますので、気になる方は下のリンクを開いてください。
- start (数値)
はカラーマップの開始の色を角度で指定します(※1)。
色相環とは色の循環を表すもので
©MaxPower(2005)/Adapted/CC BY-SA 3.0
という図で表されます。gnuplotでは上の青=0,赤=1,緑=2,…の値と色が対応しています。実際に試してみると
となり、始まりの色がstartに対応し、周期”3”を持っていることが分かります。
※1 : 角度はここによるとラジアンの事らしいのですが、gnuplot上で実際に試してみると周期が3(start 1とstart 4が同じ)であることから違うように思えます。
- cycles (数値)
は色相環を時計回り(負)、反時計回り(正)に、何周回るかを指定します。
もしもcycleが1であれば、それは青=0,赤=1,緑=2の順にstartの色から1周回ることを示します。
もしもcycleが-1であれば、それは緑=2,赤=1,青=0,の順にstartの色から1周回ることを示します。
また、cycleが0であれば、startの色から変わりません。具体的には以下のようになります。
- saturation (数値)
は色の彩度を決定します。推奨値は1以下です。ただし、推奨値では非常に淡い色になってしまうので、ここでは2を指定しています。saturation 0はモノクロになります。
具体的にはこんな感じ。
- 色の反転
デフォルトでは黒から白に向かって色が変化しますが、negative, positiveを追加することで色を反転させることができます。
- gammaの指定
cubehelixを用いた、カラーマップに影響するパラメータはもう一つあります。
それは
です。ディスプレイで綺麗に見せるための補正をするパラメータのようです。
デフォルトでは1.5に指定されています。具体的に、このように変わっていきます。
[adsense1]
cubehelixでの具体例
対象とするデータは、水素原子の(n,l,m)=(4,2,0)の解析解です。
※このデータが欲しい方はこちらHydrogen_xz_nlm420.txt(1.5MB)に置きましたので、コピペしてください。
Ctrl+aで全選択できます。
3Dの表示ではこういうグラフです。
特に記述が無いものはgammaの値はデフォルトの1.5です。
1.
set palette cubehelix start 0.5 cycles -1.5 saturation 1
きちんとした裏付けの下カラーリングされているので、論文等々にお勧めです。
2.
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.
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.
set palette cubehelix start 1 cycles 0 saturation 2
5.
set palette cubehelix start 2 cycles 0 saturation 3
6.
set palette cubehelix start 2 cycles 1 saturation 2
7.
set palette cubehelix start 3 cycles 0.5 saturation 3
8.
set palette cubehelix start 1 cycles 5 saturation 3
9.
set palette cubehelix start 1 cycles 0 saturation 2 negative
10.
set palette cubehelix start 1 cycles -1 saturation 2 negative
11.
set palette cubehelix start 3 cycles 0.5 saturation 1 negative
12.
set palette cubehelix start 3 cycles -2 saturation 2 negative
13.
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”のカラーマップです。
参考: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")
色は色相環を元に作っています。
周期的な関数を出力するときに役に立ちます。例えば、リーマン面を角度に依存させて表示する際などに利用すると良いです。こんなように。
set palette defined(1"#0000ff",2"#0080ff",3"#00ffff",4"#00ff80",5"#00ff00",6"#80ff00",7"#ffff00",8"#ff8000",9"#ff0000")
色相環を元に作成したものです。
set palette defined (-9 "purple",-6 "blue",-3 "turquoise", 0 "#f5f5f5", 3 "gold", 6 "orange", 9 "red")
※匿名希望さん提供
set palette defined(0"#ffffff",0.8"#00008b",1.8"#2ca9e1",3"#008000",4.2"#ffff00",5"#eb6101",5.5"#8b0000")
白⇒青⇒水色⇒黄色⇒オレンジ⇒赤
細かい変化を見たい時にいい感じになります。
set palette defined(0"#000000",1"#0000ff",2"#1e90ff",3"#00ffff")
黒⇒青⇒明るい青
不連続な関数を表示させる時にこのマップを使うといい感じになります。
set palette defined(0"#ffffff",1"#0000ff",2"#ff0000",3"#ffff00")
白⇒青⇒赤⇒黄
上の2つが気に入らなかったりした時に。
set palette defined(0"#00008b",1"#2ca9e1",2"#38b48b",3.5"#ffff00",5"#eb6101",5.3"#c9171e")
青⇒水色⇒黄色⇒オレンジ⇒赤
一番下が白じゃないほうがいいときに。
(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では、以下の画像のように出力されます。
0~36まで出てきます。指定は-36~36までできます。負の値は反転することを意味しています。
また、いくつかのrgbformulaeを使った例が ”help palette rgbformulae” で見れます。実際に入力するとこんな感じ。
helpで現れるカラーマップはこんな感じです。
また、今使っているカラーマップを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]