プロットした点を貫通しないように理論曲線を引く方法(gnuplot)
実験データをグラフにプロットして、同じグラフ上に理論曲線を引くときに、プロットした点を貫通しないように線を引く方法がわからずに、しばらく悩みました。それで色々試行錯誤した結果、所望のグラフが得られたので、その方法をメモします。
以下は EPS の場合とします。まず、理論曲線を先にプロットします。そのあと実験データを次のようにプロットします。
plot 20*log10(1/sqrt((1-x**2)**2 + (2*0.25*x)**2)) lt rgb "black",\ "zeta_0.25.txt" using 1:2 with points lt 7 pt 6 ps 1
pt を変更するとプロットの形状、ps を変更するとサイズ、lt を変更すると色が変わります。pt 6 は白抜きの円ですが、このままだと理論曲線の上にプロットしても理論曲線がそのまま円の中に残ってしまいます。そこで最初は中塗りの円である pt 7 でプロットし、そのあと改めて pt 6 でプロットします。
plot 20*log10(1/sqrt((1-x**2)**2 + (2*0.25*x)**2)) lt rgb "black",\ "zeta_0.25.txt" using 1:2 with points lt 6 pt 7 ps 1,\ "zeta_0.25.txt" using 1:2 with points lt 7 pt 6 ps 1
こうすると中塗りの円が理論曲線を塗りつぶすため、理論曲線がプロットデータを貫通しません(当然ですが)。というわけで、いろいろプロットしてみます。
set border 3 set xtics nomirror set ytics nomirror set xlabel "angular frequency over resonance angular frequency" set ylabel "voltage gain [dB]" set logscale x set xrange[0.1:10] set yrange[-40:20] set terminal postscript enhanced color set output "graph000.eps" plot 20*log10(1/sqrt((1-x**2)**2 + (2*0.05*x)**2)) lt rgb "black" title "",\ 20*log10(1/sqrt((1-x**2)**2 + (2*0.25*x)**2)) lt rgb "black" title "",\ 20*log10(1/sqrt((1-x**2)**2 + (2*0.5*x)**2)) lt rgb "black" title "",\ 20*log10(1/sqrt((1-x**2)**2 + (2*1.0*x)**2)) lt rgb "black" title "",\ "zeta_0.05.txt" using 1:2 with points lt 6 pt 5 ps 1,\ "zeta_0.05.txt" using 1:2 with points lt 7 pt 4 ps 1,\ "zeta_0.25.txt" using 1:2 with points lt 6 pt 7 ps 1,\ "zeta_0.25.txt" using 1:2 with points lt 7 pt 6 ps 1,\ "zeta_0.5.txt" using 1:2 with points lt 6 pt 13 ps 1,\ "zeta_0.5.txt" using 1:2 with points lt 7 pt 12 ps 1,\ "zeta_1.0.txt" using 1:2 with points lt 6 pt 9 ps 1,\ "zeta_1.0.txt" using 1:2 with points lt 7 pt 8 ps 1
凡例がたくさん出てきてしまうのが邪魔なのですが、あとで設定すればいい話なので、まあいいです。で、問題だったのは中塗りの円の色に白を指定できなかったことです。lt の値を 0 から 8 まで変えていったのですが、白は存在しなかったのです。うーん、lt 7 としても黒になってしまう…。カラー番号 7 と言ったら「白」ってのは N88BASIC 時代から決まってるでしょ!!と憤りつつも何とか他の方法を考えてました。
まあ EPS を扱える画像編集ソフトがあれば白で塗りつぶせばいいだけの話なんですけど、残念ながらソフトを持っていません。仕方ないので、EPS ファイルを直接編集してみることにします。出力した EPS ファイルの中には以下のような行を見つけました。
% Default Line colors /LCw {1 1 1} def /LCb {0 0 0} def /LCa {0 0 0} def /LC0 {1 0 0} def /LC1 {0 1 0} def /LC2 {0 0 1} def /LC3 {1 0 1} def /LC4 {0 1 1} def /LC5 {1 1 0} def /LC6 {0 0 0} def /LC7 {1 0.3 0} def /LC8 {0.5 0.5 0.5} def
EPS のファイルフォーマットはよく知りませんが、この LC5 ってところが gnuplot で指定した lt 5 に対応しているとして、{1 1 0} が黄色であることを示しているならば、ここを {1 1 1} に変えればよさそうです。というわけで、変えたら黄色だった円の中が白になりました。わーい。
というわけで、こんなグラフが完成。