gnuplot – データから高速にグラフを描く汎用プロッタCLI

集計・統計

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.gpARG1=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 timeset timefmt で取り扱えます。
  • シェルのクォート: -e に複数コマンドを渡すときは ; 区切りにし、シェル展開衝突を避けるため単一引用符を基本に。
  • スクリプト構成: よく使う設定は ~/.gnuplot(または Gnuplot.gp)に記述すると自動読み込みされます(ディストリやビルドにより名称差あり)。
  • 再描画/複数プロット: 対話中は replot で直前の設定を再描画。複数図を一枚に並べる場合は set multiplot を使用。
  • 数式・フィット: fit で最小二乗フィット、set sample/set isosamples で関数のサンプリング密度を制御。
  • 文字化け対策: 画像出力で日本語を使う場合、set term pngcairo font "Noto Sans,12" のようにフォント指定を行います。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント