gnuplot参考line2的符号改变line1的颜色

时间:2013-12-06 09:22:53

标签: conditional gnuplot

我的数据中有3列。第一个是约会。我想绘制第二列,但根据第三列中的值更改颜色。

If 3rd column is:
     Positive:  Black
     Negative:  Red
     zero:      Yellow

这就是我的尝试:

set palette model RGB defined ( 0 'yellow', 1 'red', 2 'black' )
plot "output2.txt" u 1:2:( $3 < 0 ? 1 : ( $3 > 0 ? 2 : 0 ) )  w lines palette axes x1y1

但即使第3列有负数,我也不会得到红色。

编辑1

我也让它工作有时候,但是这样的情况却没有:

$ cat t.txt
1 1 1000000
2 2 1000000
3 3 1000000
4 4 -1000000
5 5 -1000000
6 6 -1000000
7 7 -1000000

这是我的gnu脚本:

$ cat test.gnu
set terminal wxt size 1500,900
set style fill transparent solid 0.50 noborder
set key font ",6"
set palette model RGB defined ( 0 'yellow', 1 'red', 2 'black' )
plot "t.txt" u 1:2:( $3 < 0 ? 1 : ( $3 > 0 ? 2 : 0 ) )  w lines palette axes x1y1

这就是我从cygwin中调用它的方式:

~/wgnuplot -e "load \"test.gnu\"" -persist

这是结果(黄线应为红色):

enter image description here

2 个答案:

答案 0 :(得分:2)

而不是palette,我会使用linecolor variable

plot 'test.txt' u 1:2:($3 < 0 ? 2 : ( $3 > 0 ? 3 : 1 )) w lines lc variable

从三元运算符表达式(1,2,3)返回的数字应与您设置的线型相对应。

在这种情况下,我认为是:

set style line 1 lc rgb "yellow"
set style line 2 lc rgb "red"
set style line 3 lc rgb "black"

(使用以下数据测试):

1 2 3
2 2 3
3 2 0
4 2 0
5 2 12
6 2 -15
7 2 -23

请注意,如果您有高度采样的数据,这种方法很有效。采样不良的数据可能会产生一个有趣的情节,因为线段是根据文件中遇到的第二个端点处的数据值着色的。

对于它的价值,如果我使用的话,我会得到相同的结果:

set palette defined (1 'yellow', 2 'red', 3 'black')
plot 'test.txt' u 1:3:($3 < 0 ? 2 : ( $3 > 0 ? 3 : 1 )) w lines lc palette z

(这次仅使用颜色栏和键)。

答案 1 :(得分:1)

调色板中给出的值不是绝对值,但最小数字(此处为0)映射到cbrange的最小值,最高数字(此处为2)映射到cb-maximum

然而,using语句的第三列中给出的值是绝对颜色值,取决于cbrange。在您遇到问题的情况下,自动缩放会设置cbrange [1:2],以便1为黄色,1.5为红色,2为黑色。

只需使用set cbrange [0:2]来解决问题。