gnuplot で光沢がある(立体的に見える)棒グラフを描くには、棒グラフの幅と色の指定で工夫します:
Phong on histograms with a one-liner (almost:-)
まんま、上記のサイトのパクリですけど…。
plot sytle が boxの場合、using 3カラム目は幅を指定します。関数w(n)で幅を指定しています。 徐々に幅の細くなるboxを明るい色で描画していく例です。
関数fは変数colour値と、入力xをそのまま返します。 この関数がこのグラフのトリック的な部分です。 xは2カラム目を参照していますから、そのまま2カラム目を返しています。 ただし変数colourはforループがインクリメントするたびに変わります。
色は変数 colour で指定しています。for ループの変数 n が増えるたびに rgb の値を変化させます。 Rは128から、その他2色は0から増えて最終的に白に近い色にしています。
reset unset key set terminal pngcairo color enhanced font "Helvetica,18" set output "fit-test.png" set xlabel 'x' font "Helvetica,18" set ylabel 'y' font "Helvetica,18" set size ratio 0.8 set tics font "Helvetica,18" set style fill solid 1.0 set yrange [0:10] colour = "#080000" f(x,n) = (colour = sprintf("#%02X%02X%02X", 128 + n / 2, n, n), x) w(n) = 0.8 * cos(n / 230.0 * pi/2.0) plot for [n=1:230:2] 'data.dat' using 0:(f($1,n)):(w(n)) with boxes lc rgbcolor colour unset output
hsv で色を指定してみる
上記の例は rgb で指定しています。これだと任意の色を指定するのがちょっと面倒だったりします。
そこで、hsvで指定してみました。gnuplot 5.0 以降ではhsv2rgbが使えます。
hで色を指定し、s,vで彩度、明度を指定します。forループの変数nでs,vが変わるようにしています。
reset unset key set terminal pngcairo color enhanced font "Helvetica,18" set output "phong-hsv.png" set xlabel 'x' font "Helvetica,18" set ylabel 'y' font "Helvetica,18" set size ratio 0.8 set tics font "Helvetica,18" set style fill solid 1.0 set yrange [0:10] colour = "#080000" f(x,n) = (colour = hsv2rgb(0.6, 1 - n / 460.0, 0.5 + n / 460.0), x) w(n) = 0.8 * cos(n / 230.0 * pi/2.0) plot for [n=1:230:2] 'data.dat' using 0:(f($1,n)):(w(n)) with boxes lc rgbcolor colour unset output
Phong on histograms with a one-liner (almost:-) (gnuplot tricks)
上記のページには、光の照射する位置を動かす例が示されています。参考になりますよ。