3

如何以绘图坐标为单位在 gnuplot 中设置点大小?

换句话说,如果我增加 xrange,点应该会变小。

看起来这完全取决于终端。有解决方法吗?

4

2 回答 2

3

这是一个使用内联数据的小例子......

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,请尝试一下,让我知道它是如何进行的...

于 2012-04-11T14:22:56.363 回答
1

如果我正确理解了这个问题,您只希望 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 并重新输入两个绘图命令,您将看到点大小发生变化,与 xrange 成反比。您可能需要与我使用的“sps”示例不同的 pointsize 函数。我希望这就像你所追求的。

于 2012-04-12T14:37:03.490 回答