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, \n 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,\n in degrees" set ylabel "sin(angle)" plot sin(x) |
图 4. 带有 tics、标题、网格和标签的轴的 sin(x)
![图 4. 带有 tics、标题、网格和标签的轴的 sin(x)](https://www.ibm.com/developerworks/cn/linux/l-gnuplot/figure5.jpg)
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
子句的前面: