基于多个数据块的列值,为不同数据点着色 GnuPlot

3

我的问题类似于这个问题,我从中学到了很多。然而,我正在处理多个数据块,就像这样:

1 2 3
4 5 6
7 8 0
4 3 0


4 5 7
2 3 0
4 5 0
5 6 7

我正在这样绘制它们:

plot "file.txt" index 0 u 1:2 w points pt 1,\
     "file.txt" index 1 u 1:2 w points pt 2

这段脚本创建了两组不同颜色的点。现在,我的目标是修改该脚本,使得如果第三列数据为0,则该点的颜色将变为黑色。但我希望其他点仍保留当前的颜色(也就是彼此不同)。我已经进行了如下修改:

set palette model RGB defined ( 0 'black', 1 'green' )
unset colorbox
plot file index 0 u 1:2:( $3 == 0 ? 0 : 1 ) w points pt 1 palette,\
     file index 1 u 1:2:( $3 == 0 ? 0 : 1 ) w points pt 2 palette

这个代码完全满足我的需求,但是现在两组数据都以绿色显示。有没有办法把黑色的那组数据按照要求显示,并且让每个索引都显示不同的颜色?

2个回答

3
这是特殊的“变量”颜色用途:
plot 'test.dat' i 0 u 1:2:($3 == 0? 0:1) w p pt 1 lc variable,\
     'test.dat' i 1 u 1:2:($3 == 0? 0:2) w p pt 2 lc variable

在这个上下文中,variable 表示使用第三列给出的“样式索引”的颜色。我对第三列变量设置了过滤器,如果该列中的数据不为0,则将第三列转换为常数(1或2)。
另一个不太直接的方法(因为您正在使用点),是:
plot 'test.dat' i 0 u 1:($3 == 0? 1/0: $2) w p pt 1 lc rgb "red",\
     'test.dat' i 0 u 1:($3 == 0? $2:1/0) w p pt 1 lc rgb "black,\
     'test.dat' i 1 u 1:($3 == 0? 1/0: $2) w p pt 1 lc rgb "green",\
     'test.dat' i 1 u 1:($3 == 0? $2:1/0) w p pt 1 lc rgb "black,\

如果可以的话,我有一个跟进问题。请告诉我是否应该将其作为单独的问题发布。现在,我通过引用索引0、1和2来绘制红色、绿色或黑色的东西。我的新问题是,我能否使用颜色渐变(使用类似于set palette rgbformulae 33,13,10的东西)绘制第三列具有非零值的所有内容,然后如果第三列的值为零,则将其绘制为黑色? - whatsherface
@whatsherface -- 若我理解正确的话,你可以通过将我的回答和andyras的回答结合起来实现。 - mgilson
我相信这将为我提供离散的颜色,但我想使用基于第三列数据的渐变。据我所知,($8 == 0.0 ? 0 : 1) 的意思是:如果第8列为零,则绘制由“0”(黑色)引用的颜色,否则绘制由“1”引用的颜色。我需要的是:如果为零,则绘制黑色,否则使用渐变rgbformulae 33,13,10。我能否使用单个索引引用颜色渐变? - whatsherface
@whatsherface -- 我觉得你应该发一个新的问题。我很确定我可以回答这个问题,但是在评论中回答不会有很好的效果。(而且我相信你在评论之外也能给出更好的解释)。 - mgilson

2

在调色板中定义额外的点应该是有效的:

set palette model RGB defined ( 0 'black', 1 'green', 2 'red')
unset colorbox
plot file index 0 u 1:2:( $3 == 0 ? 0 : 1 ) w points pt 1 palette,\
     file index 1 u 1:2:( $3 == 0 ? 0 : 2 ) w points pt 2 palette

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接