Gnuplot:点大小单位

时间:2012-04-11 14:10:44

标签: plot gnuplot

如何以绘图坐标为单位在gnuplot中设置磅值?

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

看起来这是所有终端依赖的。有解决方法吗?

2 个答案:

答案 0 :(得分:3)

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

plot '-' u 1:2:1 ps variable
  1 2
  2 3
  3 4
  4 5
  5 6
  e

请注意,尽管可以使用数据文件中的列更改pointsize,但我不知道有任何方法可以指定每个点应该有多大,因为pointsize(甚至pointtype)是终端相关数量。我能想出的唯一解决方法是按终端相关值缩放点数。

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变大,我的点线性增加大小,但你可以替换你想要的任何函数,使点变小。 我所说的是,我不相信这个选项存在,因为你说“所有这都是终端依赖的”。我试图提供一个丑陋的黑客,允许你在每个情节的基础上修改这个,只需要很少的干预 - 允许不同的终端等。

编辑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那么试试看,让我知道它是怎么回事......

答案 1 :(得分:0)

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