gnuplot の棒グラフで phong を使う (光沢があって立体的に見える棒グラフを作るには)

2017年8月15日

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)

上記のページには、光の照射する位置を動かす例が示されています。参考になりますよ。

gnuplot

Posted by Gordius