Gnuplot 是一种免费分发的绘图工具,能够移植到各类主流平台。它能够下列两种模式之一进行操做:当须要调整和修饰图表使其正常显示时,经过在 gnuplot 提示符中发出命令,能够在交互模式下操做该工具。或者,gnuplot 能够从文件中读取命令,以批处理模式生成图表。例如,若是您正在运行一系列的实验,须要每次运行后都查看结果图表;或者当您在图表最初生成好久之后须要返回图表修改某些内容时,批处理模式能力会特别有用。当在 WYSIWIG 编辑器中很难捕获用于修饰图表的鼠标单击事件时,您能够很容易地将 gnuplot 命令保存在文件中,六个月后将其加载到交互式会话中从新执行。 html
Gnuplot 是在 1986 年由 Colin Kelley 和 Thomas Williams 最初开发的。许多参与者都在为不一样的“终端”建立变种方面作出了贡献。在 1989 和 1990 年,这些变种被合并到 gnuplot 2.0 中。2004 年 4 月,发布了 4.0 版本。本教程将适用于 4.0 版本,可是这里介绍的大多数命令应该也适用于其余版本。在适当的地方,我将说起其中的主要区别。 参考资料中列出了 gnuplot 的官方 Web 站点。 linux
下面,咱们为初学者提供了实践指南;可是即便您之前有一些 gnuplot 的经验,您也可能会在 4.0 版本中发现新的惯例和命令。咱们从简单的正弦曲线开始,将其定制为咱们所但愿看到的形状。而后咱们将研究如何绘制一组数据点。在本文中,咱们仅限于 2D 绘图,由于它们是最多见的。 shell
初学用户时常可以很好地想出他们的图表形状,可是不知道须要使用什么 gnuplot 命令。因此了解 gnuplot 的关键是很好地掌握它的词汇表,其他应该凭足够的直觉。在本教程中,我仅能对您将在 gnuplot 中充分使用的通用选项提供一个了解;本教程并非毫无遗漏的。因此,例如,我告诉您如何设置 x 范围来限制图表中 x 轴的范围。设置 y 范围与 x 范围类似(在命令中使用 yrange
,而不是 xrange
),但我将再也不讨论。 electron
基础编辑器
经过在 shell 命令提示符中输入 gnuplot
启动 gnuplot。您首先看到提示符号 >
。该提示符是进入 gnuplot 的输入点;Linux 用户将习惯于这种方式。例如,您可使用方向键来查找之前输入的命令历史记录,而后编辑和从新执行这些命令;Home 和 End 键与平时使用没有区别。能够对 gnuplot 进行从新编译以便使用 GNU readline 库在输入提示符上来回移动,但相似于默认函数。 ide
Gnuplot 提供了普遍的在线帮助,若是您要作任何有用的事情,则确定会用到这些在线帮助。语法是统一的:经过输入 help <command>
能够得到任何命令的帮助。接着启动 gnuplot,尝试命令 help set yrange
和 help set
(在每一个命令以后,使用 q
退出帮助)。注意 yrange
是 help set
下的可用子选项之一。通常来讲,gnuplot 帮助为命令的全部可能定制提供进一步的帮助。浏览帮助中的示例部分一般就足能够了解如何使用命令。 函数
Gnuplot 还有大量展现其能力的演示,一般位于安装的演示子目录中。为了得到这些能力,在 gnuplot 提示符下进入此目录中(例如, cd '/opt/gnuplot/demo'
— 注意 gnuplot 要求全部文件名和目录名都用单引号或双引号括起来),而后输入 load 'all.dem'
。该目录中的各个 .dem 文件演示了各个函数,all.dem 将它们一次所有加载。但您可能想将此操做延迟到本文结束时进行,这样咱们能够开始使用 gnuplot ,无需再进行其余操做... 工具
对于那些想要继续的人,能够在提示符中分别输入代码清单中的每行代码。或者,将整个清单保存到一个临时文件中,而后经过在 gnuplot 提示中输入 load 'filename'
(不要忘记引号)来运行代码。 post
能够预见的是,2D 绘图的命令是 plot
。在提示符中输入 plot sin(x)
:您应该在弹出窗口中看到熟悉的正弦曲线。
咱们刚刚建立了多是最简单的图。让咱们看看如何以不一样方法定制该图。假设咱们只想看到一个正弦曲线周期。咱们经过限制图的默认 x 范围来完成此操做。使用表示法 [min:max] 来指定范围。要仅指定最小值,使用 [min:];要仅指定最大值,使用 [:max]。数学上称此为所谓的“闭”区间表示法。
这里咱们使用 [-pi:pi] 获得一个正弦曲线周期:
set xrange [-pi:pi] replot reset |
咱们刚才使用了 replot
命令,它执行先前的 plot 命令。当您绘制曲线图且须要不断对该图进行修改以添加想要的特征时,此命令会很是有用。另外,replot 使您能够添加更多的图。尝试输入 replot cos(x)
。依照语法,该命令等同于 plot sin(x), cos(x)
。Replot 就是获取先前的绘图字符串,添加必要的逗号,而后附加输入给它的其他部分。
使用的最后一个命令 reset
对于绘制正弦曲线不是必要的。它移除先前全部 set
命令的效果并恢复默认值。所以,在本例中,它将使用默认 x 范围。
如今让咱们尝试一些更奇特的东西: plot sin(x)/x
。您应该看到以下所示图形:
从刚才这三个简单的例子,您能够看到 gnuplot 可以理解 pi 并具备丰富的自带数学函数词汇表。它甚至知道很是有用的管理正态分布的统计函数,以及深奥的特殊函数,如朗伯、贝塞尔、beta 和 gamma 函数(还有更多!),这些函数一般仅在 mathematica 等功能齐全的数学工具中才会有。根据经验,语法与 C 中的语法类似,C 中的语法又与日常数学中使用的语法类似。(一个重要的不一样是指数的表示法:为了方便,x 的 y 次幂写为 x**y
)。
接着,将图命名为(“My First Graph”),并命名轴(x 轴是“angle, in degrees”,y 轴是“sin(angle)”)。
set title "My first graph" set xlabel "Angle, \n in degrees" set ylabel "sin(angle)" plot sin(x) |
注意 xlabel 中的 \n
会产生新的一行。通常来讲,gnuplot 在双引号内的字符串中进行相似于 C 的反斜杠处理。Windows 用户注意:若是您想文件名使用双引号括起来的字符串表示,则必须使用两个反斜杠:如 "c:\\developerworks"
(或者可使用一个正斜杠: "c:/developerworks"
)。
如今,咱们注意到 x 轴实际没有标记为度数,看起来不是很好。要修改此问题,经过调整 x 轴上的 tic 标记,使指定的(主)标记仅以 90 度增长和辅标记以 45 度增长。主 tics 的“级别”为 0,这是默认值;辅 tics 的级别为 1。每一个点分别由一个 3 元组指定: "label"
(放在引号中)、 <point-at-which-tic-is-made>
和 <optional-level>
。
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) |
注意对 +45 度和 -45 度辅标记使用了空标签 ("")。还要注意咱们没必要以任何顺序列出点。像 gnuplot 中的其余全部项同样, xtics
命令功能很是多,具备方便的选项,用于以固定增量建立 tic 标记(在对数标度中为正常倍数),以及用于时间相关数据的特殊格式。查看 help set xtics
中的例子能够得到更多信息。
做为边注,注意咱们使用反斜杠将 xtics 命令扩展成多个输入行。这样可使比较长或比较复杂的命令更易读懂。
咱们还用 set grid
来设置网格,该命令使您能够从数量上查看图。到如今为止,咱们大量地使用了 set
命令。Gnuplot 有一种撤销设置的统一方法:在 gnuplot 4.0 中,命令是 unset
。例如,若是您不想要网格,使用 unset grid
。4.0 之前的版本,命令是 set nogrid
。
顺便说一下,咱们提供的全部例子均可以在交互模式或批处理模式下运行。要以交互模式运行,在提示符中输入每一个命令。要以批处理模式运行,将命令输入或添加到文本文件中,而后在 gnuplot 提示符中使用 load 'filename'
读入文件,或者在 shell 提示符下将其做为参数提供给 gnuplot: $ gnuplot filename
。使用第二种方法,gnuplot 会在执行输入文件中的全部命令后退出,因此当直接绘图到文件中(请参见下一节)时,采用批处理模式执行特别有效。若是在屏幕上绘图时使用第二种方法,输出窗口一出现(当 gnuplot 退出时)就会消失,因此您须要使用显式的“pause -1”命令(请参阅 help pause
)来保持窗口。
批处理模式操做中使用的 Gnuplot 命令文件每每停留一会,从而帮助使用注释来提升可读性。 #
后面的直到行结束的内容是注释。因此在示例清单 3 中,gnuplot 不处理 we want only one cycle
。
在启动时,您可能注意到终端类型设置为 X11
。Gnuplot 采用标准设计,能够在多个终端设备上绘图。这包括直接打印到多种打印机中,包括 Epson、HP 和 Imagen 打印机。它甚至能够在伪设备中绘图,如 postscript 和 png。这主要涉及生成输出文件,而不是可查看文件或打印输出。这是将您的图表包含在其余报表中的一种技巧。虽然我尚未发如今 Windows 中与在 Linux 中有什么不一样,本文档建议您在设置输出文件名以前先设置终端类型:
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}
获得上标文字。还要注意缩写的终端和输出命令:
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
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
子句的前面:
set key top left set key box plot [-pi:pi] sin(x) title "sinusoid" with linespoints pointtype 5, \ cos(x) t 'cosine' w boxes lt 4 |
上面,咱们在同一图中绘制了正弦和余弦曲线。Gnuplot 使您还能够绘制多个图,这样它们能够并排显示在同一输出屏幕或文件中。在某些排版系统中,以一个文件的形式包含两个图形比分别包含两个图形要更容易。
下面是简单说明的 multiplot
,它绘制正弦、余弦及其各自倒数的曲线图。基本方法是将屏幕或图像文件的边框比例设为 1。而后,咱们绘制不一样的曲线图,从而它们能够每一个图占据屏幕的四分之一。咱们还经过使用屏幕坐标(请参阅 help coordinates
,得到关于不一样类型坐标系统的讨论)设置原点来控制曲线图显示的位置。另外,注意每一个 plot 还自动计算轴、tic 等等的宽度 —— 这样您可能必须调整边距宽度以使不一样绘图的轴排成一行。在本例中,我必须将左边距设置为 6 个字符宽度,以便调整 cosec(x) = 1/sin(x) 的科学记数法中的 tics。
set xrange [-pi:pi] # Uncomment the following to line up the axes # set lmargin 6 # Gnuplot recommends setting the size and origin before going to # multiplot mode # This sets up bounding boxes and may be required on some terminals set size 1,1 set origin 0,0 # Done interactively, this takes gnuplot into multiplot mode # and brings up a new prompt ("multiplot >" instead of "gnuplot >") set multiplot # plot the first graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0,0.5 plot sin(x) # plot the second graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0,0 plot 1/sin(x) # plot the third graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0.5,0.5 plot cos(x) # plot the fourth graph so that it takes a quarter of the screen set size 0.5,0.5 set origin 0.5,0 plot 1/cos(x) # On some terminals, nothing gets plotted until this command is issued unset multiplot # remove all customization reset |
虽然本教程只是出于说明目的,大部份内容都集中于绘制正弦曲线,您极可能很想对试验数据、销售数据或其余相似数据绘图。在这一节,咱们将使用 IBM 的股票价格做为数据集合说明如何绘制不一样的图(本例的原始数据包含在 参考资料部分中):
日期 | 开盘 | 最高 | 最低 | 收盘 |
10-Jun-04 | 90.23 | 90.75 | 89.89 | 90.46 |
9-Jun-04 | 89.90 | 90.55 | 89.81 | 90.09 |
8-Jun-04 | 88.64 | 90.50 | 88.40 | 90.04 |
7-Jun-04 | 88.75 | 88.99 | 88.01 | 88.64 |
4-Jun-04 | 87.95 | 88.49 | 87.50 | 87.56 |
3-Jun-04 | 87.85 | 88.10 | 87.35 | 87.35 |
2-Jun-04 | 88.64 | 88.64 | 87.89 | 87.98 |
1-Jun 04 | 88.00 | 88.48 | 87.30 | 88.12 |
大多数数据集合都是数字列,可是这个数据集合有所不一样,由于 x 轴是时间数据。下列代码告诉 gnuplot 如何读取和格式化 x 轴上的时间数据(有关详细信息,请参阅 help time/data
和 help set timefmt
):
set xdata time # The x axis data is time set timefmt "%d-%b-%y" # The dates in the file look like 10-Jun-04 set format x "%b %d" # On the x-axis, we want tics like Jun 10 |
一旦设置完成,可使用下列命令对开盘价绘图。咱们选择在不一样的开盘价之间使用直线插值法,并使用 linespoints
样式,而不仅是 points
:
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2 with linespoints
象往常同样,["31-May-04":"11-Jun-04"] 显式设置了 xrange,但不是彻底必要的。注意范围的 min
和 max
须要指定为符合 timefmt
的字符串。
取决于使用的绘图样式,gnuplot 在绘制一个点时最多可使用六个不一样的编号。当读入记录时,列从 1 开始编号。 using 1:2
告诉 plot 命令使用第一列做为 x 轴,第二列做为 y 轴。因此要绘制收盘价图,咱们将使用 using 1:5
。
每次 gnuplot 看到新的数据分隔符时,列编号就会增长。默认状况下,数据分隔符为空格。因此若是时间格式中间有空格(例如 10 Jun 04
,而不是 10-Jun-04
),咱们将须要使用 using 1:4
代替 1:2
。对于 x 轴,咱们仅须要指定数据开始的第一列。Gnuplot 可以智能地使用 timefmt 字符串读取其余列。
using
使您能够添加两个以上的冒号,用于指定特定绘图样式可能须要的任何其余列。您还可使用 $n
表示第 n 列,从而对二进制表达式进行绘图。在一个彻底虚构的示例中,咱们假设不一样的价格表示不一样的试验运行,咱们要绘制平均价、最高价和最低价。 yerrorbars
样式使您能够绘制 y-high/y-low 值(咱们在 using
修饰符中指定为 x:y:ylow:yhigh
)以及计算 y 轴四个价格的平均值为 ($2+$3+$4+$5)/4:
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:($2+$3+$4+$5)/4:4:3 \
title 'daily prices, IBM' with yerrorbars
errorlines 样式是类似的,但它还在绘制的 y 轴点之间绘制线段。对于绘制财务条形图,Gnuplot 还有单独的样式,分别是最高价、最低价和 tics 在左边,右边为开盘价和收盘价。咱们使用 set bars
显示开盘价和收盘价的较大 tics):
set bars 5
plot ["31-May-04":"11-Jun-04"] 'ibm.dat' using 1:2:3:4:5 with financebars
您还能够查看 help plotting styles
得到其余相关样式,如 candlesticks、boxerrorbars 和错误绘图样式。
固然,对于真实的数据集合,事情可能会变得更复杂。最多见的就是数据集合不使用空格字符分隔数据点。gnuplot 4.0 提供了新的功能,您可使用 set datafile separator <string>
指定本身的分隔符。一样地,您还可使用 set datafile commentschar
指定除了 #
以外的注释字符。若是须要更多的控制,您能够为 using
修饰符明确指定格式字符串。Gnuplot 使用 C 标准库的 scanf
函数以及给定格式字符串(有关详细信息,请参阅 help using
)读入数据。我讲述此方法仅是为了内容更全面;可以以此方法读入的数据集合也可使用 set data file separator
进行处理,或者经过显式指定 using
修饰符中要使用的列编号来进行处理。例如,若是须要忽略第一列中的字符串,则使用 2:3 进行绘图。为了得到更彻底的灵活性,在具备 popen 函数的 Unix 类系统中,在将文件传送给 plot 命令以前,可使用文本处理实用程序对文件进行预处理。例如: plot "< awk --f preprocess.awk data.file"
。不幸的是,该命令不能在全部系统中使用。最后的一个方法是在 gnuplot 中使用输入文件以前对其进行预处理。
有时,真实的数据可能没有包含全部的点 —— 对于要绘图的列,可能有 x 值,但缺乏相应的 y 值。Gnuplot 容许您指定字符串,用于表示缺乏的数据点。例如:
set datafile missing 'NaN' # The IEEE floating point not-a-number
注意,在 4.0 版本以前,命令是 set missing <string>
。
不幸的是,处理缺乏数据的数据点的方法取决于 using
说明。若是想了解用法 plot 'file'
、 plot 'file' using 1:2
和 plot 'file' using ($1):($2)
之间区别的详细信息,请参阅 help using
。可是为了安全起见,一般指定列使用显式的 using
格式,若是您想彻底清除不合适的数据点,不要使用表达式求值(第三个选项会由于括号而对表达式求值)—— 而是,预处理数据文件并用计算的表达式的结果添加确切的列。
往常,您可能以一些无效的数据点而结束。若是 gnuplot 被告知忽略无效数据点,您仍能够对这样的数据集合绘图。Gnuplot 忽略未定义的点,这样当您遇到不合适的点时,技巧就是使用未定义的 y 值,如1/0。相似于 C 的三元算符能够很容易地表达此信息(若是您不熟悉此函数,请参阅 help ternary
;在定义分段函数时它也很是有用)。下面是 help using
中介绍的一个例子,它使您以第二列做为 y 值来绘图,除非第三列大于 10:
plot 'file' using 1:($3>10 ? $2 : 1/0)
虽然本文向您展现了会常用的大多数命令,但可能有些地方您还须要进一步地研究。在这一节,咱们简要讨论其中一些概念,而后提供了其中一个 gnuplot 演示文件(electron.dem)中的脚本,该脚本绘制电子学中常见的幅频响应图,用以说明它们的用法。
plot
命令中使用它们以前再定义参数变量。 set dummy jw
)。 axes
子句, plot
命令可使用不一样的轴集合,如 x2y2。默认状况下, plot
命令以 x 轴和 y 轴绘图。当您须要同时绘制范围为不一样量级或具备不一样单位的线时,此高级功能很是有帮助。在下面的示例中,y 轴绘制振幅,最大值为 1,y2 轴绘制相位,最大值为 100。若是对轴的相同集合绘图,振幅曲线几乎看不出来。 set logscale
命令以对数刻度绘制任何轴。此命令在轴上绘制以 10 为底的值的对数。您能够显式设置使用的底数(例如, set logscale 2
,或若是仅为 x 主轴和 y 主轴设置底数,则可使用 set logscale xy 2
)。 下例摘自与 gnuplot 一块儿提供的演示文件 electron.dem。此脚本使用了上面讨论的全部高级概念:
A(jw) = ({0,1}*jw/({0,1}*jw+p1)) * (1/(1+{0,1}*jw/p2)) p1 = 10 p2 = 10000 set dummy jw set grid x y2 set key default set logscale xy set log x2 unset log y2 set title "Amplitude and Phase Frequency Response" set xlabel "jw (radians)" set xrange [1.1 : 90000.0] set x2range [1.1 : 90000.0] set ylabel "magnitude of A(jw)" set y2label "Phase of A(jw) (degrees)" set ytics nomirror set y2tics set tics out set autoscale y set autoscale y2 plot abs(A(jw)), 180/pi*arg(A(jw)) axes x2y2 |
在本文中,咱们讨论了使用新发布的 gnuplot 4.0 绘制 2D 图形的复杂性。虽然咱们接触了大多数的关于使用 gunplot 的重要方面,但限于篇幅有限,咱们仍有少数主题没有讨论。值得注意的一些省略范围包括从很是简单的参数函数绘图(请参见 help parametric
)、极坐标( help polar
),到曲线拟合(它使用户定义曲线与给定数据集合相匹配)。曲线拟合是一门艺术,须要用一整篇文章来说述,可是请参阅 help fit
和 beginners_guide and tips 来对它得到初步了解。
正如咱们所看到的,gnuplot 是高度可定制的。我将以这个最后的技巧来结束本文,它说明如何在多个 gnuplot 会话中重用您的定制。定制的主要命令是 set
命令。您可使用 save set 'filename'
保存当前会话的全部设置。 save var <file>
和 save func <file>
分别保存用户定义的变量和函数。可是没法保存传送到单一 plot 命令的定制(例如, plot [-pi:pi] sin(x)
中的 x 范围)。这些文件可使用 load <file>
读回。Gnuplot 还在开始时查找名为 .gnuplot
的文件。它首先在当前目录中查找,而后在用户的主目录中查找(Windows 中的 USERPROFILE 目录)。若是找到初始化文件,gnuplot 会执行其中的命令。一些用户将此方法用于设置终端类型和定义常用的函数或变量。