gnuplot:带有数据颜色的填充曲线

时间:2015-03-13 15:20:48

标签: gnuplot

我想使用带有调色板的填充曲线。

我的数据如下:

0 0 0 1 1 1 1 0 0.5
2 2 2 3 3 3 3 2 0.6

我的绘图命令:

set terminal pngcairo size 800,600
set output "test.png"
set style fill solid 1.0 noborder
unset border
unset xtics
unset ytics
plot '< awk ''{print $1,$2,$9,"\n",$3,$4,$9,"\n",$5,$6,$9,"\n",$7,$8,$9,"\n",$1,$2,$9,"\n"}'' rect.txt' \
using 1:2:3 with filledcurves fillcolor palette notitle

不幸的是,这只会产生黑色方块,因为我希望它们是彩色的。有没有办法用gnuplot实现正确的彩色数字?

修改

按建议使用:

set terminal pngcairo size 800,600
set output "test.png"
set style fill solid 1.0 noborder
unset border
unset xtics
unset ytics
file = 'rect.txt'
lines = system(sprintf('wc -l %s | cut -d'' '' -f 1', file))
frac(x) = system(sprintf('awk ''{if (NR==%d){ print $9 }}'' %s', x, file))
rect(x) = sprintf('awk ''{if (NR==%d){ print $1,$2,$4,"\n",$5,$8,$6,"\n"}}'' %s', x, file)
plot for [i=1:lines] '< '.rect(i) using 1:2:3 with filledcurves palette frac frac(i) notitle

内容为rect.txt:

0 0 0 1 1 1 1 0 0.5
2 2 2 3 3 3 3 2 0.6
2 2 2 1 1 1 1 2 0.2

产生以下结果: enter image description here

1 个答案:

答案 0 :(得分:1)

filledcurves绘图样式不支持使用调色板对文件中的数据进行着色。这里的主要问题是,通常,当使用palette时,人们希望根据某些数据值更改单个区域内的颜色。

要从调色板的小数位置获取颜色值来为单个矩形着色,可以使用palette frac <value>。这要求您迭代所有矩形。

为了正确使用filledcurves,您需要一种不同的数据格式,例如

x1 y1_low y1_high
x2 x2_low y2_high

由于您正在使用awk,因此您可以为实际绘图提取更多信息:

set terminal pngcairo size 800,600
set output "test.png"
set style fill solid 1.0 noborder
unset border
unset xtics
unset ytics
file = 'rect.txt'
lines = system(sprintf('wc -l %s | cut -d'' '' -f 1', file))
frac(x) = system(sprintf('awk ''{if (NR==%d){ print $9 }}'' %s', x, file))
rect(x) = sprintf('awk ''{if (NR==%d){ print $1,$2,$4,"\n",$5,$8,$6,"\n"}}'' %s', x, file)
plot for [i=1:lines] '< '.rect(i) using 1:2:3 with filledcurves palette frac frac(i) notitle

使用数据文件

0 0 0 1 1 1 1 0 0.5
2 2 2 3 3 3 3 2 0.6
2 2 2 1 1 1 1 2 0.2

你得到了输出

enter image description here