【问题标题】:Gnuplot: point size unitsGnuplot:点大小单位
【发布时间】:2012-04-11 14:10:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: plot gnuplot


    【解决方案1】:

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

    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,请尝试一下,让我知道它是怎么回事...

    【讨论】:

    • 这不是我所要求的答案。我知道如何使点大小可变。我不知道如何在 gnuplot 调用'first'的坐标系中指定大小。
    • 我知道。我要说的是,我不相信该选项存在,因为正如您所说“这一切都取决于终端”。我试图提供一个丑陋的 hack,让您可以在每个情节的基础上以最少的干预对其进行修改——允许不同的终端等。
    • @hanno,显然我说得太早了,这是可能的(至少如果你想让你的观点显示为圆圈)。请参阅我的第二次更新。
    • 太棒了!谢谢。这就是我一直在寻找的。​​span>
    • 没问题。谢谢你的问题——我也学到了一些新东西!
    【解决方案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终端吗?我猜这就是它的全部目的。但是,我很确定问题的作者希望对磅值进行精细控制。
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多