我正在使用这个最小样本:
set xrange [0:10]
plot x**2
这会生成一个很好的平滑图形。但是,我希望在x(0,1,2,...,10)的自然值上只绘制点,使图表“刚性”,如下所示:
是否有可能在没有数据文件的情况下执行此操作?
我知道Gnuplot x-axis resolution,但是,如果我使用它,我需要在每次更改xrange时调整样本分辨率。
答案 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
可以防止相同坐标处的多点。
答案 1 :(得分:1)
您可以通过管道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