gnuplot全般
gnuplotのインストール
apt-get install gnuplot
apt-get install gnuplot-x11
軸ラベルのオフセット指定
set xlabel "x" offset *,*
set ylabel "y" offset *,*
対数スケールの設定と軸ラベルの書式設定
set logscale x
set format x "$10^{%L}$"
軸ラベルの冪乗表示設定
set format x "$%.0t \\times 10^{%T}$"
gnuplotのepslatexでの出力
set terminal epslatex color 12(文字サイズ)
set output "graph.eps"
グラフを描画した後、すぐに別名でoutputを指定しないとepsの凡例表示がおかしくなったり、そもそもコンパイルエラーが出る。
gnuplotのepslatexで綺麗なepsファイルを作る
LaTeXの文章に貼り付けるだけならいいが、文字入りのファイルを作るのであれば
\documentclass[12pt]{article}
\usepackage[dvips]{graphicx}
\pagestyle{empty}
\begin{document}
\input{graph.tex}
\end{document}
で画像を貼り込んだLaTeXファイルをコンパイルし、できたdviファイルを
dvips -E -o figure.eps figure.dvi
このままだと余白がやや大きいのでepstoolを用いて余白を最小化する(standaloneクラスはあまり役に立たない)。
epstool --copy --bbox figure.eps dammy
mv dammy figure.eps
ubuntu用にスクリプト化するならこんな感じ
#!/bin/sh
gnuplot $1.gp
echo '\\documentclass[12pt]{article}' > figure.tex
echo '\\usepackage[dvips]{graphicx}' >> figure.tex
echo '\\usepackage{amsmath,amssymb}' >> figure.tex
echo '\\pagestyle{empty}' >> figure.tex
echo '\\begin{document}' >> figure.tex
echo '\\input{graph.tex}' >> figure.tex
echo '\\end{document}' >> figure.tex
latex figure.tex
dvips -E -o figure.eps figure.dvi
epstool --copy --bbox figure.eps dammy
mv dammy $1.eps
rm graph.tex
rm graph.eps
rm figure*
ただしgpファイルの先頭に
set terminal epslatex color 12
set output "graph.tex"
を入れておく必要がある。
ただしepstoolはバグでものすごくおかしなBoundingBoxを叩き出すことがある(set size squareとunset yticsを組み合わせたときに起こったことを確認)。この場合はepstoolを使う代わりに
eps2eps figure.eps dammy
としてdammyの中のBoundingBoxを元々のfigure.epsに設定すれば良い。スクリプトにするなら
#!/bin/sh
gnuplot $1.gp
echo '\\documentclass[12pt]{article}' > figure.tex
echo '\\usepackage[dvips]{graphicx}' >> figure.tex
echo '\\usepackage{amsmath,amssymb}' >> figure.tex
echo '\\pagestyle{empty}' >> figure.tex
echo '\\begin{document}' >> figure.tex
echo '\\input{graph.tex}' >> figure.tex
echo '\\end{document}' >> figure.tex
latex figure.tex
dvips -E -o figure.eps figure.dvi
eps2eps figure.eps dammy
DAM=`sed -n '2,2p' dammy`
sed -i "5c$DAM" figure.eps
mv figure.eps $1.eps
rm dammy
rm graph.tex
rm graph.eps
rm figure*
gnuplotでグラフをアスキーアートで表示する
set terminal dumb
gnuplotのeveryの使い方
every 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロック
範囲を指定してプロットする
plot [a:b] f(x)はset xrangeと矛盾すると挙動が変になるのであまり使い物にならない。ここは3項演算子とやらを使って
plot ((x-a)*(x-b) < 0 ? f(x) : 1/0)
Mathematicaっぽい外見の関数プロット
ここを参照リストデータのみからヒストグラムを作る
gnuplotではKaleida graphなどの有料グラフ作成ソフトと違ってリストデータからヒストグラムは作られないと思っていたがそんなことはなかった。 ここを参照複数ファイルを1つに結合してプロットする
plot "< paste file1.dat file2.dat" using 1:($2/$4)
線分を引く
set arrow from *,* to *,* nohead lc * lw *
点を打つ
set label 1 point ps * pt * lc * at *,*
splotで線、点を描画する場合はfrontも付ける。
組み込み関数atan2(y,x)=atan(y/x)
atan2(x,y)ではないので注意 (fortranと同じでMathematicaと逆)