【发布时间】:2013-10-22 17:30:27
【问题描述】:
plot x+3 , x**2+5*x+12
是否可以将 x+3 设置为只有 2 个样本,而将 x**2+5*x+12 设置为在同一个图中有 1000 个样本?
【问题讨论】:
标签: gnuplot
plot x+3 , x**2+5*x+12
是否可以将 x+3 设置为只有 2 个样本,而将 x**2+5*x+12 设置为在同一个图中有 1000 个样本?
【问题讨论】:
标签: gnuplot
可以做到,但不能开箱即用。
第一个变体使用一个临时文件来保存一个低采样率的函数,然后将其与高分辨率函数一起绘制:
set samples 2
set table 'tmp.dat'
plot x+3
unset table
set samples 1000
plot 'tmp.dat' w lp t 'x+3', x**2 + 5*x + 12
这样做的好处是,您可以为这两个函数使用任何采样率。
对于一个函数的 2 样本的特殊情况,可以在没有外部文件的情况下完成,但它涉及相当多的技巧:
set xrange [-10:10]
s = 1000
set samples s
f1(x) = x + 3
set style func linespoints
set style data linespoints
plot '+' using (x0 = (($0 == 0 || $0 == (s-1) )? $1 : x0), \
($0 < (s-2) ? 1/0 : x0)):(f1(x0)) t 'x+3',\
x**2 + 5*x + 12
我在这里所做的是:
+ 在当前xrange 中生成一组坐标。这必须设置,无法自动缩放。1/0 来跳过除第一个和最后一个以外的所有点不起作用,因为剩余的两个点未连接。x-值(当$0 或column(0) 等于0 时)并在遇到倒数第二个点时使用它。对于最后一点,使用通常的值。这适用于您的 2 样本的特殊情况。
您必须记住,第一个函数被视为数据,因此您必须同时使用set style data 和set style func(只是为了显示它)。
4.6.4的结果是:
【讨论】: