通过宏定义可调整的新点类型

时间:2015-01-15 04:18:22

标签: gnuplot

我想使用具有另一种颜色的粗边框的符号来绘制数据点。 我cqn通过绘制两个具有相同符号的数据点(例如一个圆圈; pt 7)但尺寸因给定因子(此处为1.5)而不同,并且当然具有不同的颜色(这里有颜色1 -red-和3 -blue - )。

p 'data.dat' pt 7 lc 1 ps 1*1.5, '' pt 7 lc 3 ps 1

我试图通过宏来实现这一目标。到目前为止,我已将此行添加到gnuplot初始化文件中(.gnuplot ot gnuplot.ini如果我没有记错的话):

#Define points with a surrounding color
surr(a,b,c,d)=sprintf("pt %d lc %s ps %d*1.5, \"\" pt %d lc %s ps %d",a,b,d,a,c,d)

在gnuplot中,我会这样做:

s=surr(7,1,3,1)
p 'data.dat' @s

这很好但我想改进它的两倍:

一:能够像

那样做
s=surr(7,@cblue,@cblue2,2) 

cblue = 'rgbcolor "#0083AB"'
cblue2 = 'rgbcolor "#64A8A3"'

先前定义

但是@cblue不是整数,这不起作用。另一方面,我仍然希望能够使用整数。遗憾的是,我不知道哪种格式适合。

二:调整两个符号之间的比例(在我的定义中固定为1.5)。但是,定义

surr(a,b,c,d,e)=sprintf("pt %d lc %s ps %d*%d, \"\" pt %d lc %s ps %d",a,b,d,e,a,c,d)    

抱怨%d*%d并且我不知道如何解决这个问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您希望对所提供的参数具有完全的灵活性,则必须仅使用字符串参数:

surr(pt, lc1, lc2, ps, fac)=sprintf("pt %s lc %s ps %s*%s, \"\" pt %s lc %s ps %s", pt, lc1, ps, fac, pt, lc2, ps)

现在你可以使用你想要的任何东西:

cblue = 'rgbcolor "#0083AB"'
cblue2 = 'rgbcolor "#64A8A3"'

s=surr("7",cblue,cblue2,"1", "2")
plot 'data.dat' @s

s = surr("7", "2", "3", "2", "4")
plot 'data.dat' @s

允许您输入整数或字符串的一个选项是使用字符串concat运算符.,它执行从int到string的转换(不是从double转换为字符串!)。尝试

surr(pt, lc1, lc2, ps, fac) = "pt ".pt." lc ".lc1." ps ".ps.sprintf("*%f", fac).", '' pt ".pt." lc ".lc2." ps ".ps

cblue = 'rgbcolor "#0083AB"'
cblue2 = 'rgbcolor "#64A8A3"'
s=surr(7, cblue,cblue2,1, 2)

plot 'data.dat' @s

至少在Linux上有用,不确定这种自动转换是否也适用于Windows。