LoginSignup
28
33

More than 5 years have passed since last update.

gnuplotで綺麗な(?)グラフを作る

Last updated at Posted at 2014-05-27

最近、グラフを作る時はmatplotlibが綺麗でイイナーとか思い始めたわけですが、いやいやgnuplotだって負けてはいません。
頑張れば綺麗な図が作れるぞい、という事でちょっとやってみようという話である。

ただし気をつけたまえ!
綺麗だという事と「見やすい」「わかりやすい」「論文に使える」とかいう事は全く別である!
世の中綺麗さよりもわかりやすさが優先される事は往々としてあるのだ!

とかまぁそれはさておき、完成したグラフを見せておきませう。
こんな感じである。
Figure 0.png
データが何を意味しているかとかはとりあえず今回知らなくてOKです。
では、作り方のレシピ公開。

reset

まずはresetです。
とりあえず色々な設定を初期化しておくと。
scriptで食わせるなら不要なわけですが、これが無いと何となく落ち着かない性分なもので。テヘヘ。

set datafile separator ","

さて、今回はデータファイルがCSVなので、データファイルのセパレーターは","です。
デフォルトだとスペースとかタブとかになってたはずなので、ここで変更をしておきます。

set grid lc rgb "white" lt 2

gridを表示します。line colorなのですが、実は後で背景の色を変えたいので、白にしておきます。
line typeは何となく2に。なんでだっけ?単に書く癖があるだけかも。

set border lc rgb "white"

これも、背景を黒にするので設定しておきましょう。
枠の色を白に。

set ytics 0.2

y軸なのですが、今回のデータはyレンジが0〜1で決まってるデータです。
デフォルトだと0.1刻みなのですが、ちょっとウザったいかしらと思ったので、0.2刻みに変更します。

set xlabel "semi-major axis" tc rgb "white" font ",30"
set ylabel "eccentricity" tc rgb "white" font ",30" offset 1, 0
set cblabel "Temp" tc rgb "white" font ",30"

x軸のラベルとy軸のラベルをセットします。
色コンターを使うのでcolor bar labelもセット。
ここも文字色は白に。
fontはデフォルトでも構わないんだけど、サイズは大きくしたいので30ptにしておこーっと。
あとylabelを軸に近づけたかったのでoffset 1, 0して近づけてます。はい。

set logscale x

x軸をlogでプロットしたかったのでセット。

set size ratio 2.0/(1.0 + sqrt(5.0))

x軸とy軸でアスペクト比が同じ場合は当然同じにするんですが、
今回はそういうわけではないのでアスペクト比を変えました。
まぁ基本なんでもいいと思うんですがこういう時は黄金比にすることにしてるので黄金比です。

set palette rgbformulae 22, 13, -31

gnuplotのデフォルトのコンターカラーを見るとgnuplot使ってることがバレバレで嫌なので、虹色コンターに変えます!
わざわざ使っておきながらバレるのが嫌とは何事だという感もしないでもない!

set obj rect behind from screen 0, screen 0 to screen 1, screen 1

背景を黒にします。
つまり、screenいっぱいの黒い四角をbehindに置くことでそれを実装します。
色は省略したら自動的に黒っぽいいい感じの色になってくれたのでこのままで。

p [:10][]"exoplanet.eu_catalog.csv" u 11:($14 == 0 ? NaN : $14):(log($2)/500.0):($63) with circles notitle fs transparent solid 0.85 lw 2.0 pal

下準備は終わり、いよいよプロットに移ります。
データファイルはexoplanet.eu_catalog.csvです!
何のデータでしょうねぇさっぱりわかりません!
まず、x軸は11行目にしたかったので11にしました。
y軸は14行目にしたかったのですが、14行目のデータは物によっては測られていないので、0の場合はNaNを返すことでプロットさせないことにしました。
点のサイズは2行目にしたかったのですが、データの大きさが桁でバラバラなので、logを取って調整しました。
点の色は63行目にしたがって付けたかったので63にしました。
プロットの種類はcirclesです。
判例は無くていいのでnotitleに。
fill styleですが、透過率を0.85にして、塗りつぶしにしました。
枠線の太さは2.0に。
また、palを指定して塗りつぶしはデータファイルから引っ張ってくる事を指定します。

さて、以上がこのグラフの生成scriptでした。
まとめるとこんな感じ。

reset
set datafile separator ","
set grid lc rgb "white" lt 2
set border lc rgb "white"
set ytics 0.2
set xlabel "semi-major axis" tc rgb "white" font ",30"
set ylabel "eccentricity" tc rgb "white" font ",30" offset 1, 0
set cblabel "Temp" tc rgb "white" font ",30"
set logscale x
set size ratio 2.0/(1.0 + sqrt(5.0))
set palette rgbformulae 22, 13, -31
set obj rect behind from screen 0, screen 0 to screen 1, screen 1
p [:10][]"exoplanet.eu_catalog.csv" u 11:($14 == 0 ? NaN : $14):(log($2)/500.0):($63) with circles notitle fs transparent solid 0.85 lw 2.0 pal

reset

これでgnuplotでもオシャンティーなグラフがかける!
負けるなgnuplot!頑張れgnuplot!ごめんねでも最近はmatplotlibに浮気中だgnuplot!

28
33
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
28
33