假设我想绘制一个图表,并想在图表上显示一些要点。如何在 gnuplot 中执行此操作?例如,在以下图表中y= x2,我想显示(2,4)和(4,16)。
答案1
我认为上述答案没有什么帮助,因为在我写这篇文章的时候,第一个谷歌搜索结果方法非常不令人满意。
它利用 gnuplot 读取 stdout 的能力来生成数据,这样
plot "< echo '1 2'"
将会把单个数据点放置在点 x=1, y=2 处。
它有几个缺点,使得它几乎无法使用。
首先,没有一种好的方法将变量传递到此方法中,因为它已经使用了两种类型的引号。因此,使用宏在 sprintf 语句中传递变量被禁用,因为需要第三种类型的引号。
其次,它需要运行 plot 命令才能调用该点。这意味着,如果我想绘制多个点,我必须将 plot 语句附加到主 plot 语句中。如果我想以任何脚本方式执行此操作,而不仅仅是以显式列表的形式执行此操作,我又必须运行宏,正如我已经指出的那样,这对于这种技术不起作用。
Gnuplot 确实有两种更适合生成单点的技术。
首先,如果您只需要在某个点处标记,则可以使用 gnuplot 对象类型在该点处绘制一个圆,例如
set object circle at <x>,<y> size <r>
其中<x>
和<y>
是点的坐标,<r>
是要绘制的圆的大小。圆可以着色、填充、透明等,就像任何 gnuplot 对象一样。
其次,如果你确实需要具有特定点样式的标记,则可以使用 gnuplot 的label
命令。通过将标签文本设置为空并指定点类型,将在指定的坐标处绘制一个点,例如,
set label <i> "" at <x>,<y> point pointtype <n>
<i>
在点处设置一个带有标签索引的点x=<x>
,y=<y>
点类型为<n>
(在默认的 wxt 终端中,n=1 为红色十字,n=2 为绿色圣安德鲁十字,n=3 为蓝色星号,等等...)
通过这种方式,可以设置要绘制的多个点,并且可以为另一个功能发出单独的绘制命令,而不必使绘制语句与所有要绘制的单个点混杂在一起。
答案2
首先,您需要定义要绘制的函数f()
(例如,使用指数符号)**
。绘制两个图形,一个用于绘制函数,另一个用于绘制重要点。然后输入点的数据4 16
和2 4
。您可以使用终止e
。
f(x) = x ** 2
plot f(x), '-' with points
4 16
2 4
e
现在您可以根据需要自定义渲染。