【发布时间】:2012-04-11 14:10:44
【问题描述】:
如何以绘图坐标为单位在 gnuplot 中设置点大小?
换句话说,如果我增加 xrange,点应该会变小。
看起来这完全取决于终端。有解决办法吗?
【问题讨论】:
如何以绘图坐标为单位在 gnuplot 中设置点大小?
换句话说,如果我增加 xrange,点应该会变小。
看起来这完全取决于终端。有解决办法吗?
【问题讨论】:
这是一个使用内联数据的小例子...
plot '-' u 1:2:1 ps variable
1 2
2 3
3 4
4 5
5 6
e
请注意,虽然可以使用数据文件中的列来更改点大小,但我不知道有什么方法可以指定每个点的大小,因为点大小(甚至点类型)是与终端相关的数量。我能想出的唯一解决方法是按终端相关值缩放点。
default_value=1.0
func(x)=1.0*x #Change this to change the functional dependence of the pointsize on x.
scale_point(x)=(GPVAL_TERM=="postscript") ? 1.0*func(x) :\
(GPVAL_TERM=="png") ? 2.0*(x) :\
default_value
plot "mydata.dat" u 1:2:(scale_point($1)) w pt ps variable
这很丑,但它应该可以完成工作——你也可以编写一个类似的函数来返回 pointtype 以实现某种终端独立性......
编辑
注意,随着 x 变大,我的点会线性增加,但您可以替换任何您想要使点变小的函数,因为您认为合适。 我要说的是,我不相信该选项存在,因为正如您所说“这一切都取决于终端”。我试图提供一个丑陋的 hack,让您可以在每个情节的基础上以最少的干预对其进行修改——允许使用不同的终端等。
编辑 2
在回复您的评论时,我想起了 gnuplot 文档的一个奇怪的小角落,它可能会有所帮助。
set style fill transparent solid noborder #whatever fillstyle you want...
plot 'mydata' u 1:2:3 w circles
请参阅help circles ...我不确定何时引入此功能,可能是在 gnuplot 4.3 中,但如果您使用的是 4.2,请尝试一下,让我知道它是怎么回事...
【讨论】:
如果我正确理解了这个问题,您只希望 pointsize 是 xrange 的递减函数。打印点的大小以及它们的外观取决于终端。但是得到你想要的基本行为并不难。
首先,定义一个函数来返回pointsize。我们试试吧
sps(a,b) = 1./(b-a)
设置你的 xrange:
set xrange [0:3]
制作一个你不会使用的情节:
plot sin(X)
我们这样做是为了定义一些 gnuplot 的特殊变量。现在我们可以做
plot sin(x) with points pt 7 ps sps(GPVAL_X_MIN, GPVAL_X_MAX)
如果您现在重置 xrange 并重新输入 both 绘图命令,您将看到点大小的变化与 xrange 成反比。您可能需要与我使用的“sps”示例不同的 pointsize 函数。我希望这和你所追求的一样。
【讨论】:
unknown终端吗?我猜这就是它的全部目的。但是,我很确定问题的作者希望对磅值进行精细控制。