gnuplot 变量 pointsize

gnuplot variable pointsize

我尝试用不同大小的点绘制文件,如下:

N = 3

symbol(N) = strcol(N) eq "3" ? 3 : ( strcol(N) eq "2" ? 2 : (strcol(N) eq "1" ? 1 : 0)  ) 

set xrange [0:6]
plot 'data.dat' using 2:1:(symbol(N)*1) with points pt 7 ps var

实际上,如果第三列由整数组成(即:1,2,5),这是正确的,但如果文件的格式为:

#1st cl  2nd cl 3rd cl

 23.     0.       4.21
 34.     0.       1.2
 56.     0.       1.92

我什么都画不了。是因为我必须更改 symbol(N) 行中的某些内容吗?

感谢大家。

不确定您为什么要采用这种复杂的方法,但我想这应该接近您想要实现的目标:

数据集

#1st cl  2nd cl 3rd cl
 23.     0.       1.5
 34.     0.       2.5
 56.     0.       3.5

gnuplot 命令:

plot[ -1:7 ]  'data.dat' using 2:1:( column( 3 ) > 3 ? 3 : ( column( 3 ) < 2 ? 1 : 2 ) ) with points pt 7 ps var

图表:

您的代码不适用于非整数,因为 symbol(N) returns 0 当 N 不同于 1、2 或 3 时:

gnuplot> symbol(N) = ( N==3 ? 3 : (N==2 ? 2 : (N==1 ? 1 : 0) ) ) 
gnuplot> print symbol(1.0), symbol(3.0), symbol(4.21), symbol(1.2)
1 3 0 0

这些是此函数的一些变体,可能会对您有所帮助:

symbol(N) = (floor(N) == N ? N : 0.5)     # return N if N is an integer; return 0.5 otherwise
symbol(N) = floor(N)                      # return largest integer not greater than N
symbol(N) = ceil(N)                       # return smallest integer not less than N
symbol(N) = N                             # just return N, doh'

注意我定义了 symbol(N) 而没有 strcol(N),所以你可以这样调用这个函数:

plot 'data.dat' using 2:1:(symbol()) w p pt 7 ps var