我想使用带有调色板的填充曲线。
我的数据如下:
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
产生以下结果:
答案 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
你得到了输出