Gnuplot:点大小单位

3

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

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

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

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

这个函数可能不太好看,但它能完成工作——你也可以编写一个类似的函数,返回点类型,以实现某种终端独立性......

编辑

请注意,我的点随着x的增大呈线性增长,但您可以替换任何您想要的函数,使点在您认为合适的情况下变小。 我想说的是,我认为这个选项不存在,因为正如您所说,“所有这些都依赖于终端”。我试图提供一个丑陋的hack,让您能够在最小干预的情况下针对每个绘图进行修改,从而允许使用不同的终端等。

编辑2

在回应您的评论时,我记起了gnuplot文档中一个奇怪的小角落,可能会有所帮助。

set style fill transparent solid noborder  #whatever fillstyle you want...
plot 'mydata' u 1:2:3 w circles

请查看帮助圆...我不确定这个功能是什么时候引入的,可能是在gnuplot 4.3中,但如果您正在使用4.2,则可以尝试并告诉我结果如何...


这不是我所问的答案。我知道如何使点大小可变。我不知道如何在 gnuplot 调用“first” 的坐标系中指定大小。 - hanno
我知道。我的意思是,我不相信这个选项存在,因为正如你所说,“所有这些都取决于终端”。我试图提供一个丑陋的hack,以允许您在最小干预的情况下按每个图进行修改 - 允许使用不同的终端等。 - mgilson
@hanno,显然我说得太早了,这是可能的(至少如果你想让你的点出现为圆形)。请参见我的第二次更新。 - mgilson
太棒了!感谢您。这正是我一直在寻找的。 - hanno
1
没问题。谢谢你的问题——我也学到了新东西! - mgilson

1
如果我理解问题正确的话,您只想让点大小成为xrange的递减函数。打印的点有多大以及它们的外观取决于终端。但是很容易获得您想要的基本行为。
首先,定义一个返回点大小的函数。让我们尝试一下:
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”示例的点大小函数。我希望这是您想要的内容。


对于制作不会使用的图形,我可以建议使用“unknown”终端吗?我猜这就是它的全部目的。但是,我相当确定问题的作者想要对点大小进行精细控制。 - mgilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接