2012-09-14 67 views
2

我的问题与this非常相似,从中我可以学到很多东西。然而,我与多个数据块的工作,像这样:根据多个数据块的列值改变点颜色gnuplot

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 

它创建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

它应该工作在调色板定义一个额外的点:

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

+0

美丽,谢谢! – whatsherface

2

这是特殊的 “变量” 的颜色是什么:

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

如果没有问题,我有一个后续问题。让我知道是否应该将其作为单独问题发布。我现在通过引用索引0,1和2绘制红色,绿色或黑色的东西。我的新问题是,我可以绘制所有其第三列具有非零值的所有颜色渐变(使用类似设置调色板的东西rgbformulae 33,13,10),然后如果第三列的值为零,将其绘制成黑色? – whatsherface

+0

@whatsherface - 如果我正确地理解你,这应该是可能的只是结合我的答案和答案由andyras – mgilson

+0

我相信会工作给我离散的颜色,但我想使用基于数据的梯度第三栏。据我了解,($ 8 == 0.0?0:1)表示:如果第8列为零,则绘制由“0”引用的颜色(黑色),如果不是,则绘制由“1 ”。我需要的是:如果为零,则绘制黑色,如果不是,则使用梯度rgbformulae 33,13,10。我可以使用单个索引来引用颜色渐变吗? – whatsherface