https://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html
http://blog.sciencenet.cn/blog-373392-527507.html
http://blog.sciencenet.cn/blog-373392-529904.html
语法是统一的:通过输入 help <command>
可以获得任何命令的帮助。接着启动 gnuplot,尝试命令 help set yrange
和 help set
(在每个命令之后,使用q
退出帮助)。注意 yrange
是 help set
下的可用子选项之一。
在提示符中输入 plot sin(x)
:您应该在弹出窗口中看到熟悉的正弦曲线。
set xrange [-pi:pi]
replot
reset
replot
命令,它执行先前的 plot 命令。当您绘制曲线图且需要不断对该图进行修改以添加想要的特征时,此命令会非常有用。另外,replot 使您可以添加更多的图。尝试输入 replot cos(x)
。依照语法,该命令等同于 plot sin(x), cos(x)
。Replot 就是获取先前的绘图字符串,添加必要的逗号,然后附加输入给它的其余部分。set title "My first graph"
set xlabel "Angle,
in degrees"
set ylabel "sin(angle)"
plot sin(x)
现在,我们注意到 x 轴实际没有标记为度数,看起来不是很好。要修改此问题,通过调整 x 轴上的 tic 标记,使指定的(主)标记仅以 90 度增加和辅标记以 45 度增加。主 tics 的“级别”为 0,这是默认值;辅 tics 的级别为 1。每个点分别由一个 3 元组指定: "label"
(放在引号中)、 <point-at-which-tic-is-made>
和 <optional-level>
。
1
2
3
4
5
6
7
8
9
|
set xrange [-pi:pi] # we want only one cycle set xtics ("0" 0, "90" pi/2, "-90" -pi/2, "" pi/4 1, "" -pi/4 1, "" 3*pi/4 1, "" -3*pi/4 1) set grid set xlabel "Angle,
in degrees" set ylabel "sin(angle)" plot sin(x) |
图 4. 带有 tics、标题、网格和标签的轴的 sin(x)
xtics
命令功能非常多,具有方便的选项,用于以固定增量创建 tic 标记(在对数标度中为正常倍数),以及用于时间相关数据的特殊格式。查看 help set xtics
中的例子可以获得更多信息。终端设备 —— 题外话
在启动时,您可能注意到终端类型设置为 X11
。Gnuplot 采用标准设计,可以在多个终端设备上绘图。这包括直接打印到多种打印机中,包括 Epson、HP 和 Imagen 打印机。它甚至可以在伪设备中绘图,如 postscript 和 png。这主要涉及生成输出文件,而不是可查看文件或打印输出。这是将您的图表包含在其他报表中的一种技巧。虽然我还没有发现在 Windows 中与在 Linux 中有什么不同,本文档建议您在设置输出文件名之前先设置终端类型:
清单 4. 设置输出和终端类型
1
2
3
4
|
set terminal png # gnuplot recommends setting terminal before output set output "output.png" # The output filename; to be set after setting # terminal replot |
现在,文件 output.png 中有了您刚才绘制的图,且可以包含在一个更大的报表中。许多普遍使用的排版和制图程序都有专门的终端,这些程序包括 Adobe Illustrator( set term aifm
)、Corel Draw( set term corel
)、AutoCad( set term dxf
)和多种 LaTex 相关的终端( eepic
、 latex
、 pstricks
、 texdraw
、 tpic
等等)。您还可以得到 PostScript、enhanced PostScript (eps) 或 Adobe PDF 格式的文件。您的 gnuplot 版本可能没有编译所有的终端驱动程序 —— 例如,Windows 用户不需要 Xll 终端,Linux 用户不需要 Windows 终端。类似地,出于法律原因,gnuplot 4.0 移除了对 gif 终端的支持。
所有终端在能力上都不相同。其中的一些(如 LaTeX)可能不支持文本的旋转,所以如果您像我们前面那样设置 ylabel,在不同的终端中可能显示不一样。换句话说,您可以在 LaTeX 的特定终端中使用 LaTex 命令。例如, set ylabel "$sin(\theta)$"
(注意我们使用两个反斜杠产生一个 LaTex 所需的反斜杠 —— gnuplot 在将双引号中所括的字符串传送到终端驱动程序之前,先对其进行反斜杠处理)。现在,您可以使用 input{output.tex}
将输出文件包含在 LaTeX 文件中。要在 PostScript 终端中获得相同的结果,使用相应的 PostScript 命令: {/Symbol q}
。在 enhanced PostScript 和 LaTeX 中,您可以使用表示法 x^{superscript}
和 x_{subscript}
得到上标文字。还要注意缩写的终端和输出命令:
清单 5. eps 驱动程序的能力
1
2
3
4
5
6
|
set term post enh # enhanced PostScript, essentially PostScript # with bounding boxes set out 'gplt.eps' set xlabel '{/Symbol q_1} set ylabel 'sin^2({/Symbol q_1})' plot sin(x)**2 |
参考资料部分的代码补充说明包含具有以上命令的 TeX 文件示例。
鼠标支持
版本 4.0 提供了新的功能,Windows 和 X11 终端支持鼠标交互。鼠标支持有两个主要用途:坐标跟踪和缩放。鼠标指针的当前坐标显示在终端窗口的左下角。通过双击第一个鼠标按钮可以将其复制到剪贴板中。当您需要设置需要直接坐标的标签或箭头时,此操作会非常有用。(使用 help arrow
和 help label
可以获得这些命令的更多详细信息。)还可以拖动第二个(或右击)鼠标按钮来选择要放大的矩形区域。在 3D 绘图中,您可以拖动鼠标来旋转图像(按住 Ctrl 键将仅更改轴的视图;所以对于要用很长时间才能呈现的图,可以先更改轴,然后放开 Ctrl 键来重新呈现图)。
鼠标支持还支持一组有用的热键:如果先前对图进行了放大, u则取消访大。 g切换网格, l切换坐标轴上的刻度; L切换最靠近指针的最标轴上的刻度, r切换标尺,标尺会建立任意原点。启用了标尺后,屏幕的底部显示当前坐标指针距离标尺原点的 x 轴距离和 y 轴距离以及距离实际原点的 x 轴和 y 轴距离(与点的坐标相同)。在 3D 中,方向键可以用在鼠标拖拉的地方来旋转图像。空格键激活命令窗口, q退出终端窗口。要查看所有选项,在支持鼠标的终端中输入 h。
控制比例和长宽比
默认情况下,gnuplot 对 x 轴和 y 轴都使用比例系数 1,但是它对控制图形的长宽比(y 轴长度与 x 轴长度的比率)不起作用。终端驱动程序使用终端的默认长宽比。比例系数、长宽比或者两者都可以使用 set size
命令指定,例如:
# square is synonymous to an aspect ratio of 1;
# scale y-axis by 2, retain x-axis size
set size ratio square 1,2
gnuplot 使用给定的长宽比能否成功绘制图可能受到终端能力的限制。 set size
也是与 multiplot
命令一起使用才有用,multiplot 命令用于在同一输出屏幕或文件中生成多个图。
绘制多条曲线
正如精明的读者可能已经从上面关于 replot 的注释中推测到的,gnuplot 使您可以同时画多条线。假设我们同时绘制正弦和余弦曲线。简单的 plot 命令为 plot sin(x), cos(x)
;要画的曲线以逗号分隔。如果不再指定其他项,gnuplot 自动显示两个曲线图,从而它们可以互相区别 —— 在诸如 Windows 和 Xll 的终端中,gnuplot 使用不同的颜色。单色终端使用不同种类的线显示曲线图。通过查看图例(或键),您应该能够知道图中的线分别是何种曲线。gnuplot 还允许您指定绘图的样式,以便获得进一步的控制:
unset xtics # keep all other things simple
plot sin(x) with linespoints pointtype 5, cos(x) w boxes lt 4
图 5. 多条曲线
with
子句(请参阅 help plot with
,如果使用版本 4.0,还有 help plotting styles
)使您可以详细而精确地指定线的样式。在本例中,我们说明两种有用的样式。第一种样式 linespoints
通常在对数据绘图时非常有用,它在涉及的每个示例或数据点处标记一个点,并使用线性插值法连接连续的点。这里我们另外指定点类型为 5,它选择终端允许的第五种点。第二种样式 boxes
更适合绘制直方图数据。注意我们如何在 cos(x) 曲线中将 with
缩写成 w
。类似地, lt
是 linetype 的缩写,是另一个特定于终端的设置,它选择终端可以绘制的四种线。不必说(什么,您还没有尝试 help plot with
吗?),您可以使用 pt
代替冗长的 pointtype。如果想在多条线中使用相同的绘图样式(在一个 plot 命令中或在多个 plot 命令中),可以使用 set 命令设置绘图样式。在 gnuplot 4.0 中,使用 set style function linespoints
;以前的版本使用语法 set function style boxes
。要更改用于绘制与函数相对的数据集合的样式,使用 set style data linespoints
(以前的版本使用 set data style linespoints
)。
with
子句是我们使用除了 set
之外的其他项来定制图的第一个例子。一些其他普遍使用的选项也可以直接在 plot 命令中设置。例如,还可以设置 xrange: plot [-pi:pi] sin(x)
。对默认绘图选项的快速而随意的一次性更改则使用此类语法。要在多个图中或在多个 plot 命令中重新使用,需要使用 set
命令。
当绘制两条或多条曲线时,我们需要关键字或图例来对它们进行区分。默认情况下,关键字在右上角;但是如果它妨碍了图,可以将关键字放到其他位置 —— 如果愿意,甚至可以放到图外。下面的代码片段将关键字放在了左上角,并在它周围设置了一个框。我们还通过在 plot 命令中给定明确的标题来控制图例中为曲线提供的名称。title 可以缩写为 t,正如我们对余弦曲线的设置。如果不想在图例中命名曲线,使用 notitle
,而不是 title
。最后一点,也是新用户经常出错的地方就是如果有标题,标题必须放在 with
子句的前面: