根据线条2的符号改变线条1的颜色的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

尽管第三列有负数,但我从未获得红色。

编辑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


1
那对我来说很好。你能展示一下你的数据文件中显示问题的几行吗? - Christoph
@Christoph -- 是的,对我也有效... - mgilson
@Christoph 请查看编辑1 - ManInMoon
2个回答

2

我会使用 linecolor 变量,而不是 palette

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
调色板中给出的值不是绝对值,而是将最小数字(这里为0)映射到的最小值,将最高数字(这里为2)映射到cb-maximum。
然而,在using语句的第三列中给出的值是绝对颜色值,并且取决于cbrange。在您的问题案例中,自动缩放设置了为[1:2],因此1为黄色,1.5为红色,2为黑色。
只需使用“set cbrange [0:2]”来解决问题。

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