gnuplot は数値データや関数から2D/3Dグラフを作成し、画面表示や画像ファイル(PNG/SVG/PDF など)に出力できるコマンドラインツールです。
実務ではログやCSVの可視化、バッチでのレポート生成、サーバー上でのヘッドレス画像出力に利用します。
構文(Syntax)
# 基本
gnuplot [OPTIONS] [SCRIPT.gp]
# 1行で実行(コマンドを -e で渡す)
gnuplot -e "set term pngcairo size 800,600; set output 'out.png'; plot 'data.csv' using 1:2 with lines"
# スクリプトに引数を渡す(ARG0.., ARG1.. を利用)
gnuplot -c SCRIPT.gp [ARG1 [ARG2 ...]]
# 対話モード
gnuplot
gnuplot> plot sin(x)
SCRIPT.gpは#!/usr/bin/env gnuplotを先頭に置くことで実行ファイル化できます。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-e "CMD;..." | 起動時にコマンド列を実行して終了 | gnuplot -e "plot sin(x)" |
-p, --persist | プロット後もウィンドウを閉じずに保持 | gnuplot -p -e "plot cos(x)" |
-c SCRIPT.gp [ARGS...] | スクリプトを実行し引数を渡す | gnuplot -c plot.gp input.csv out.png |
-q, --quiet | 冗長なメッセージを抑制 | gnuplot -q -e "plot sin(x)" |
-h, --help | ヘルプを表示して終了 | gnuplot -h |
-V, --version | バージョン表示 | gnuplot -V |
画像ファイルに書き出す場合は、スクリプト内で
set term pngcairo(またはsvg,pdfcairoなど)とset output 'file'を設定します。終わりにunset outputまたはプログラム終了でクローズされます。
実行例
CSV(カンマ区切り)を折れ線グラフにしてPNG保存
説明: 1列目をX、2列目をYにして出力します。
コマンド:
gnuplot -e "set datafile separator ','; set term pngcairo size 1000,600; \
set output 'plot.png'; set key left top; set grid; \
plot 'data.csv' using 1:2 with lines title 'value'"
端末上にASCIIグラフ(GUI不要)
説明: サーバー等でヘッドレスに簡易表示。
コマンド:
gnuplot -e "set term dumb 100 25; plot sin(x)"
出力例(例):
1.0 ++-----******----+-----******----+-----******----+-----******---++
+ * * +
0.0 + * * +
+ * * +
-1.0 ++--------------******----+-----******----+-----******----+-----++
-6 -3 0 3 6
ヒアドキュメントでワンファイル化(PNG出力)
説明: スクリプトをインラインで書いて実行します。
コマンド:
gnuplot <<'GP'
set term pngcairo size 1200,700
set output 'multi.png'
set grid; set key outside
set multiplot layout 1,2 title "Metrics"
set datafile separator ","
plot 'a.csv' using 1:2 with lines title 'A', \
'a.csv' using 1:3 with lines title 'B'
plot 'b.csv' using 1:2 with points title 'B points'
unset multiplot
GP
スクリプトに引数を渡して汎用化(-c)
説明: plot.gp が ARG1=IN, ARG2=OUT を読む想定です。
コマンド:
gnuplot -c plot.gp input.csv output.svg
plot.gp 例:
infile=ARG1; outfile=ARG2
set term svg size 800,480; set output outfile
set datafile separator ','
plot infile using 1:2 with lines title 'y'
エラー例:入力ファイルが存在しない
説明: 指定ファイルがないと読み込みに失敗します。
コマンド:
gnuplot -e "plot 'no_such.csv' using 1:2 with lines"
出力例(例):
warning: Cannot open file "no_such.csv"
対処: パス/権限を確認するか、カレントディレクトリを合わせます。
関連コマンド
awk/sed:前処理(列抽出・集計)でgnuplotに渡すデータを整形。Rscript/python -m matplotlib:統計/高度描画の代替・併用。convert(ImageMagick)/ffmpeg:生成画像の結合・動画化。csvkit:CSV 前処理ツール群(csvcut,csvstatなど)。
備考
- 端末(driver)の選択: GUI 表示は
qt/wxt/x11など、画像はpngcairo/svg/pdfcairo、テキストはdumb。サーバーでは画像端末を選ぶと便利です。 - CSV/TSV: 区切りは
set datafile separator ','で変更。日付はset xdata timeとset timefmtで取り扱えます。 - シェルのクォート:
-eに複数コマンドを渡すときは;区切りにし、シェル展開衝突を避けるため単一引用符を基本に。 - スクリプト構成: よく使う設定は
~/.gnuplot(またはGnuplot.gp)に記述すると自動読み込みされます(ディストリやビルドにより名称差あり)。 - 再描画/複数プロット: 対話中は
replotで直前の設定を再描画。複数図を一枚に並べる場合はset multiplotを使用。 - 数式・フィット:
fitで最小二乗フィット、set sample/set isosamplesで関数のサンプリング密度を制御。 - 文字化け対策: 画像出力で日本語を使う場合、
set term pngcairo font "Noto Sans,12"のようにフォント指定を行います。
参考
- 公式サイト(ダウンロード/ドキュメント): http://www.gnuplot.info/
- ドキュメント(公式マニュアル・PDF/HTML): http://www.gnuplot.info/documentation.html
- FAQ: http://www.gnuplot.info/faq/faq.html
- スクリプト集(Gnuplotting): https://www.gnuplotting.org/
- 端末(terminal)一覧と設定例: http://www.gnuplot.info/docs_5.4/gnuplot.pdf (該当章参照)

コメント