gnuplot:仅在自然x值上绘制点

时间:2014-11-29 11:26:19

标签: math gnuplot

我正在使用这个最小样本:

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

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

enter image description here

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

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

2 个答案:

答案 0 :(得分:1)

如果您想要积分,可以使用伪文件"+"。它就像一个包含一列数字的文件。你必须设置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

仍然使用伪文件'+',它将其值向下舍入到下一个整数。作为log ans,你确保sample点的数量足够高,以至于在每个整数之间总共产生一个数字(假设是整个yrange的两倍),它可以工作。 smooth unique可以防止相同坐标处的多点。 enter image description here

答案 1 :(得分:1)

使用shell

您可以通过管道shell命令为您提供所需的点来代替文件:

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)上,可以通过使用'&lt;'启动文件名来通过shell命令传送数据文件。

显然这也适用于某些Windows系统(使用cygwin),但其他Windows平台因失误而失败(见下文)。这似乎是因为gnuplot打开了一个Windows批处理shell。

但是,如果您尝试通过system("command")方式调用shell命令,则会出现更明确的错误(至少在我的窗口上):

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