Graphics gnuplot变量pointsize

Graphics gnuplot变量pointsize,graphics,gnuplot,Graphics,Gnuplot,我尝试用不同大小的点绘制一个文件,如下所示: 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

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

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
我不会画任何东西。是因为我必须更改
符号(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
plot[-1:7]“data.dat”使用2:1:(第(3)列>3?3:(第(3)列<2?1:2))点pt 7 ps变量
图表:


您的代码不能处理非整数,因为
符号(N)
N
与1、2或3不同时返回0:

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'
请注意,我在没有strcol(N)的情况下定义了
symbol(N)
,因此您可以将此函数调用为:

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

为什么不使用点pt 7 ps var的2:1:3绘制“data.dat”?如果您检查是否相等,并且没有提供等于“1”、“2”或“3”的数据,则没有任何内容可显示。。。