【问题标题】:gnuplot: plot points only on natural x valuesgnuplot:仅在自然 x 值上绘制点
【发布时间】:2014-11-29 11:26:19
【问题描述】:

我正在使用这个最小的示例:

set xrange [0:10]
plot x**2

这会产生一个漂亮的平滑图。但是,我希望只有在 x (0, 1, 2, ..., 10) 的自然值上绘制点,使图表“刚性”,如下所示:

是否有可能在没有数据文件的情况下执行此操作?

我知道Gnuplot x-axis resolution,但是,如果我要使用它,我需要在每次更改 xrange 时调整样本分辨率。

【问题讨论】:

    标签: math gnuplot


    【解决方案1】:

    使用外壳

    您可以使用管道命令而不是文件来为您提供所需的点:

    plot "<seq 0 10" using 1:($1**2) w lp

    便携性?

    请参阅此文档:http://www.chemie.fu-berlin.de/chemnet/use/info/gnuplot/gnuplot_13.html#SEC53,我引用:

    在某些具有 popen 功能的计算机系统 (UNIX) 上,可以通过 shell 命令通过以“

    显然,这也适用于某些 Windows 系统(使用 cygwin),尽管其他 Windows 平台失败并出现可悲的错误(见下文)。这似乎是因为 gnuplot 打开了一个 Windows 批处理 shell。

    如果您尝试通过 system("command") 方式调用 shell 命令,您会得到更明确的错误(至少在我的 Windows 上):

    gnuplot> plot "<echo 0 1 2 3 4 5 6 7 8 9 10" using 1:($1**2) w lp  \
             # fails, implying the < syntax doesn't even exist
         warning: Skipping unreadable file "<echo 0 1 2 3 4 5 6 7 8 9 10"
         No data in plot
    
    gnuplot> plot system("echo 0 1 2 3 4 5 6 7 8 9 10") using 1:($1**2) w lp \
             # fails with proper warning, then tries to reuse previous file
         warning: system() requires support for pipes
         warning: Skipping unreadable file "<echo 0 1 2 3 4 5 6 7 8 9 10" 
         No data in plot
    
    gnuplot> !pause # shows a windows batch window
    

    【讨论】:

    • 这很好用,谢谢!对于未来的访问者,您能否添加有关如何构建此命令的说明或对文档的引用? :)
    • 恐怕我在寻找更棘手的方法,有条件等,然后导致我提出这个问题:stackoverflow.com/questions/11187691/…,它使用 shell 调用但没有引用
    • 嗯,好的。顺便说一句,你知道这是否也适用于 Windows?它在 my 窗口上运行良好,但我安装了 MinGW 和 Cygwin。如果不是,则应在答案中添加一个小注释。
    • 哈,它在我的windows上不起作用,我必须在linux上测试它。我会编辑,详细说明我能做的。
    • 谢谢!我会稍等一下,看看其他人是否提出其他解决方案,然后可能会接受您的答案!
    【解决方案2】:

    如果你想要积分,你可以使用伪文件"+"。它就像一个文件,在单个列中包含一系列数字。您必须设置 xrange。点数由set samples决定:

    set xrange[-5:5]
    set samples 11 # need 11 points: 0, 1, 2, ..., 10
    plot "+" u 1:($1**2) with linespoints
    

    编辑:

    首先,这是真的:您不必为linespoints 使用'+'...

    好的,这是怎么回事:

    plot '+' u (floor($1)):(floor($1)**2) smooth unique w lp
    

    仍然使用伪文件'+',它将其值向下舍入到下一个整数。作为日志,您确保sample 点的数量足够高,以至于在每个整数之间总是生成一个数字(假设是整个 yrange 的两倍),它可以工作。 smooth unique 防止在同一坐标上出现多个点。

    【讨论】:

    • 我已经提到了set samples(见底部的链接),以及为什么我不想使用它。
    • 嗯,这与最后一行的plot x**2 with linespoints 的效果完全相同,+ 文件在这里没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多