通过宏定义可调的新点类型
Defining tunable new point types through macro
我想使用具有另一种颜色粗边框的符号来绘制数据点。
我 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
,我不知道如何解决这个问题。
有什么想法吗?
如果你想对你提供的参数有充分的灵活性,你必须只使用字符串参数:
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
允许您输入整数或字符串的一个选项是使用字符串连接运算符 .
,它执行从 int 到字符串的转换(而不是从 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。
我想使用具有另一种颜色粗边框的符号来绘制数据点。
我 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
,我不知道如何解决这个问题。
有什么想法吗?
如果你想对你提供的参数有充分的灵活性,你必须只使用字符串参数:
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
允许您输入整数或字符串的一个选项是使用字符串连接运算符 .
,它执行从 int 到字符串的转换(而不是从 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。