我的数据中有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
这是结果(黄线应为红色):
答案 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]
来解决问题。