gnuplot
コマンドラインで使えるグラフプロットツール
グラフを作って画像出力したりできる
統計データCSVとかから自動でグラフ生成して保存したりするのに使える
ただしデータをいちいちインポートしないといけないのが手間
コマンドラインでデータを集計してそのままグラフを作ってしまいたいならgnuplotが使える 使用例
sin
code:sh
echo "set term png; plot sin(x); set out \"out.png\"; replot" | gnuplot -p > /dev/null
https://gyazo.com/e6da18c2fae3dc02066488a1e9f37384
文字列の出現回数のプロット
code:sh
head -n 1000 /ro*/go/src/gi*/Yu*/say*/scr*/sho* |
mecab |
grep -v EOS |
grep 名詞 |
awk '{print $1}' |
sort |
uniq -dc |
sort -rnk1 |
head |
awk 'BEGIN{print "set term png font \"IPAゴシック,14\"; set title \"sayhuuzoku頻出単語グラフ\"; plot '"'"-"'"' using 0:1:xtic(2) with boxes; set out \"out.png\"; replot"} {print}' |
gnuplot -p > /dev/null
https://gyazo.com/2fa6bc85bc6c49f5a5c49d07642a6b48
基本的な使い方
データファイルのファイルを読み込んで表示
code:1.plot
plot "sample.dat"
code:sh
gnuplot -p < 1.plot
この場合は各OSの画像ビューワが立ち上がる
標準入力からデータを読み込んで表示
code:sh
seq 9 | awk 'BEGIN{print "plot \"-\" with line"} {print}' | gnuplot -p
plot "-" with lineとデータの前に指定する
画像ファイルに出力する
code:sh
echo "set term png; plot sin(x); set out \"out.png\"; replot" | gnuplot -p > /dev/null
set term pngして
plotして
set outで出力先を指定して
replotする
この時ターミナルに画像が吐き出されて邪魔だから/dev/nullに捨てる
日付データを扱う
code:sh
for i in {1..10}; do
echo "$(date -d "$i days ago" +%Y-%m-%d) $i"
done | awk 'BEGIN{print "set xdata time; set timefmt \"%Y-%m-%d\"; set terminal png; plot \"-\" using 1:2 with line; set out \"/images/a.png\"; replot"} {print}' | gnuplot -p > /dev/null
https://gyazo.com/5afbaf7b18b505b22d4d9ec92e46e1f6
set xdata time
x軸が日付データである
set timefmt "%Y-%m-%d"
日付データの書式
plot "-" using 1:2 with line
標準入力からデータを受ける
1列目と2列目のデータを使う
set xdata timeを使う時はusingが必須
プロットする時に線で描画する
描画フォントを指定する
code:sh
echo "set term png font \"IPAゴシック,14\"; set title \"テストタイトル\"; plot sin(x); set out \"/images/out.png\"; replot" | gnuplot -p > /dev/null
https://gyazo.com/632f4e02f41568b1e72dd97a8bc167da
set term png font "IPAゴシック,14"
IPAゴシックフォントをフォントサイズ14で使用する
指定できるフォント名はそのOSに依存する
インストールされているフォントを確認してから指定すること
set title "テストタイトル"
グラフにタイトルを付ける