LoginSignup
16
12

More than 5 years have passed since last update.

gnuplot で matplotlib 風の美しい3次元グラフを描くテンプレート

Last updated at Posted at 2018-08-20

Gnuplottingが公開しているカラーマップを利用して,matplotlibで描いたような美しい配色の3Dグラフをgnuplotで描けるテンプレートを作成しました.次に示すような2種類を用意してあります.論文などに使えそうです.

example.png

環境

  • OS: Windows 7
  • Gnuplot Version 5.2.4

準備

初めに,GnuplottingがGitHub上で公開しているカラーパレットをダウンロードしておきます.これらのカラーパレットファイル (.pal) をgnuplotファイルがあるディレクトリに置き,gnuplotファイルの冒頭に次の一行を書けば3Dグラフの色が変更されます.

load 'palette.pal'

"palette"の部分は,使用したいカラーパレットの名称に適宜書き換えてください.定番のカラーパレットは,magma,inferno,plasma,viridisの4つです.これらは,色覚の個人差によらず識別性が高く,モノクロ印刷でも綺麗に仕上がる優れた配色です.

example2.png

コード

冒頭で示した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 # 画像を出力

参考資料

16
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12