5月は色々タスクが多かった.中旬に人生で初めてコロナvirusにかかってしまいまして,1週間くらい自宅警備員として働いてました.流行りに乗らないという意味ではかっこいいか(?)

 
今回はグラフ描画ソフトであるGnuplotの話です.

Gnuplotでグラフを作る際,ラスター形式(PNG, JPG…)で出力すると解像度が低くて困ることがあると思います.例を示した方が早いので,とりあえず適当に三角関数を描画してみましょうか.本記事ではpngcairoしか紹介しないので悪しからず.

実行環境#

  • WSL2 (Ubuntu 24.04.3 LTS)
  • Gnuplot (Version 6.0 patchlevel 0)

以下のスクリプトsinx_1.pltはGnuplotのterminalをpngcairoに設定し,640×480の解像度でPNG画像を出力します.

sinx_1.plt
reset

plot sin(x)

set terminal pngcairo size 640, 480
set out "out1.png"

replot

出力される画像(out1.png)がこちら

out1.png

一見これで十分なように見えますが,少し拡大してみると粗が目立ちます.論文など人に見せるグラフであれば,あと一息解像度を高くしたいところです.

ということで解像度を縦横それぞれ2倍にしましょう.以下のスクリプトsinx_2.pltは1280×940の解像度で出力します.

sinx_2.plt
reset

plot sin(x)

set terminal pngcairo size 1280, 940
set out "out2.png"

replot

出力される画像(out2.png)がこちら

out2.png

はい,解像度は高くなりましたがコレジャナイ感が…
そうじゃなくて目盛りとかの比率はそのままにして解像度を上げて欲しいんや!matplotlibならそんなの簡単にできるんだよ?このままじゃ皆matplotlib使うようになっちゃうよ?

実際はticskey等をいじれば比率はなんとかなるんですが,目的の解像度が変わるたびに毎回調整するのは骨が折れます.

ということで本題.以下のスクリプトsinx_3.pltは,呪文を追加することでグラフ内の各要素の比率を保ちながら解像度のみを上げます.このスクリプトではscale=4として,640×470の4倍の解像度である2560×1920で出力しています.

sinx_3.plt
reset

plot sin(x)

scale = 4
set terminal pngcairo size 640*scale, 480*scale fontscale scale linewidth scale pointscale scale
set out "out3.png"

replot

そして出力される画像(out3.png)がこちら

out3.png

out1.pngと比較してみると一目瞭然かと思います.細部がくっきりしていますね.追加した呪文は大したものではありませんが,端的に説明すると設定したscale変数に合わせて解像度が高くなるとともに,フォントなどの要素がscale変数の分だけ倍率がかかり大きくなるという内容です.よって実質解像度のみが増加しているという状態.

これで簡単に高解像度のグラフを作成することができますし,解像度を変更したいときも比率を保ってくれます.なんと便利だ.

今年で40歳のGnuplotさんは若造のmatplotlibに負けないよう頑張ってください.

この記事が誰かの役に立てれば幸いです.では今回はこの辺で失礼します.