Gnuplottingが公開しているカラーマップを利用して,matplotlibで描いたような美しい配色の3Dグラフをgnuplotで描けるテンプレートを作成しました.次に示すような2種類を用意してあります.論文などに使えそうです.
環境
- OS: Windows 7
- Gnuplot Version 5.2.4
準備
初めに,GnuplottingがGitHub上で公開しているカラーパレットをダウンロードしておきます.これらのカラーパレットファイル (.pal) をgnuplotファイルがあるディレクトリに置き,gnuplotファイルの冒頭に次の一行を書けば3Dグラフの色が変更されます.
load 'palette.pal'
"palette"の部分は,使用したいカラーパレットの名称に適宜書き換えてください.定番のカラーパレットは,magma,inferno,plasma,viridisの4つです.これらは,色覚の個人差によらず識別性が高く,モノクロ印刷でも綺麗に仕上がる優れた配色です.
コード
冒頭で示した2種類のグラフのコードを以下に掲載します.これらのコードをgnuplotファイル (.plt) として保存し,「準備」節で述べた条件のもと実行すれば画像が出力されます.
実装例 ① のコード
sample1.plt
#================================
# drawing settings
#================================
load 'palette.pal' # カラーパレットを読込み
set isosample 32, 32 #メッシュの細かさ x方向, y方向
set hidden3d # 陰面消去
#set grid # 底面にグリッドを表示
set pm3d at b # 底面に正射影
unset key # 凡例を非表示
#================================
# plotting settings
#================================
set xlabel 'x' # x軸のラベル
set ylabel 'y' # y軸のラベル
set zlabel 'f(x, y)' # z軸のラベル
xAxisMax = 4 # x軸の上限
xAxisMin = -4 # x軸の下限
yAxisMax = 4 # y軸の上限
yAxisMin = -4 # y軸の下限
zAxisMax = 10 # z軸の上限
zAxisMin = -8 # z軸の下限
set xrange[xAxisMin : xAxisMax] # x軸の描画範囲を設定
set yrange[yAxisMin : yAxisMax] # y軸の描画範囲を設定
set zrange[zAxisMin : zAxisMax] # z軸の描画範囲を設定
set colorbox user origin 0.90, 0.14 size 0.024, 0.60 #カラーボックスの表示位置を変更
set cbrange[zAxisMin : zAxisMax] # カラーボックスの表示範囲を設定
set cbtic scale 0 # カラーボックスの目盛り線を非表示
#set cblabel "f(x,y)" rotate offset -2, 0 # カラーボックスのラベル
#unset colorbox #カラーボックスを非表示
set view 68, 300, 1, 1 # 前後の回転 (度) ,左右の回転 (度) ,全体の縮尺,z軸の縮尺
#================================
# plotting functions or data
#================================
f(x, y) = 3 * (1-x)**2 * exp(-(x**2) - (y+1)**2) - 10 * (x/5 - x**3 - y**5) * exp(-x**2-y**2) - 1/3 * exp(-(x+1)**2 - y**2) # 描画する関数
splot f(x, y) ls 7 palette # プロット (メッシュ表示)
#================================
# output
#================================
set terminal pngcairo size 600, 600 # アンチエイリアスpng形式 (600*600 px) で出力
#set terminal postscript eps size 4, 4 # eps形式(400*400 px) で出力
set out "out1.png" # ファイル名を指定
replot # 画像を出力
実装例 ② のコード
sample2.plt
#================================
# drawing settings
#================================
load 'palette.pal' # カラーパレットを読込み
set ticslevel 0 # z軸の原点をxy平面に合わせる
set isosample 64, 64 #メッシュの細かさ x方向, y方向
set hidden3d # 陰面消去
set grid # 底面にグリッドを表示
set contour # 底面に等高線を表示
set cntrparam levels incremental -8, 1.5, 10 # 等高線の刻み幅
unset key # 凡例を非表示
#================================
# plotting settings
#================================
set xlabel 'x' # x軸ラベル
set ylabel 'y' # y軸ラベル
set zlabel 'f(x, y)' # z軸ラベル
xAxisMax = 4 # x軸の上限
xAxisMin = -4 # x軸の下限
yAxisMax = 4 # y軸の上限
yAxisMin = -4 # y軸の下限
zAxisMax = 10 # z軸の上限
zAxisMin = -8 # z軸の下限
set xrange[xAxisMin : xAxisMax] # x軸の描画範囲を設定
set yrange[yAxisMin : yAxisMax] # y軸の描画範囲を設定
set zrange[zAxisMin : zAxisMax] # z軸の描画範囲を設定
set colorbox user origin 0.90, 0.14 size 0.024, 0.60 #カラーボックスの表示位置を変更
set cbrange[zAxisMin : zAxisMax] # カラーボックスの表示範囲を設定
set cbtic scale 0 # カラーボックスの目盛り線を非表示
#set cblabel "f(x,y)" rotate offset -2, 0 # カラーボックスのラベル
#unset colorbox #カラーボックスを非表示
set view 68, 300, 1, 1 # 前後の回転 (度) ,左右の回転 (度) ,全体の縮尺,z軸の縮尺
#================================
# plotting functions or data
#================================
f(x, y) = 3 * (1-x)**2 * exp(-(x**2) - (y+1)**2) - 10 * (x/5 - x**3 - y**5) * exp(-x**2-y**2) - 1/3 * exp(-(x+1)**2 - y**2) # 描画する関数
splot f(x, y) with pm3d ls 7 palette # プロット (塗りつぶし表示)
#================================
# output
#================================
set out "out2.png" # ファイル名を指定
set terminal pngcairo size 600, 600 # アンチエイリアスpng形式 (600*600 px) で出力
#set terminal postscript eps size 4, 4 # eps形式(400*400 px) で出力
replot # 画像を出力