基础
通过在 shell 命令提示符中输入 gnuplot 启动 gnuplot。您首先看到提示符号 >。该提示符是进入 gnuplot 的输入点;Linux 用户将习惯于这种方式。例如,您可以使用方向键来查以前输入的命令历史记录,然后编辑和重新执行这些命令;Home 和 End 键与平时使用没有区别。可以对 gnuplot 进行重新编译以便使用 GNU readline 库在输入提示符上来回移动,但类似于默认函数。
Gnuplot 提供了广泛的在线帮助,如果您要做任何有用的事情,则肯定会用到这些在线帮助。语法是统一的:通过输入 help 可以获得任何命令的帮助。接着启动 gnuplot,尝试命令 help set yrange 和 help set(在每个命令之后,使用 q 退出帮助)。注意 yrange 是 help set 下的可用子选项之一。一般来说,gnuplot 帮助为命令的所有可能定制提供进一步的帮助。浏览帮助中的示例部分通常就足可以了解如何使用命令。
Gnuplot 还有大量展示其能力的演示,通常位于安装的演示子目录中。为了获得这些能力,在 gnuplot 提示符下进入此目录中(例如,cd '/opt/gnuplot/demo' — 注意 gnuplot 要求所有
Gnuplot 提供了广泛的在线帮助,如果您要做任何有用的事情,则肯定会用到这些在线帮助。语法是统一的:通过输入 help 可以获得任何命令的帮助。接着启动 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'(不要忘记引号)来运行代码。
可以预见的是,2D 绘图的命令是 plot。在提示符中输入 plot sin(x):您应该在弹出窗口中看到熟悉的正弦曲线。
对于那些想要继续的人,可以在提示符中分别输入代码清单中的每行代码。或者,将整个清单保存到一个临时文件中,然后通过在 gnuplot 提示中输入 load 'filename'(不要忘记引号)来运行代码。
可以预见的是,2D 绘图的命令是 plot。在提示符中输入 plot sin(x):您应该在弹出窗口中看到熟悉的正弦曲线。
图 1. sin(x)
我们刚刚创建了可能是最简单的图。让我们看看如何以不同方法定制该图。假设我们只想
看到一个正弦曲线周期。我们通过限制图的默认" x 范围来完成此操作。使用表示法 [min:max] 来指定范围。要仅指定最小值,使用 [min:];要仅指定最大值,使用 [:max]。数学上称此为所谓的“闭”区间表示法。
这里我们使用 [-pi:pi] 得到一个正弦曲线周期:
清单 1. 从 -pi 到 +pi 的 sin(x)
set xrange [-pi:pi]
replot
reset
这里我们使用 [-pi:pi] 得到一个正弦曲线周期:
清单 1. 从 -pi 到 +pi 的 sin(x)
set xrange [-pi:pi]
replot
reset
图 2. 重绘正弦曲线图
我们刚才使用了" replot 命令,它执行先前的 plot 命令。当您绘制曲线图且需要不断对该图进行修改以添加想要的特征时,此命令会非常有用。另外,replot 使您可以添加更多的图。尝试输入 replot cos(x)。依照语法,该命令等同于 plot sin(x), cos(x)。Replot 就是获取先前的绘图字符串,添加必要的逗号,然后附加输入给它的其余部分。
使用的最后一个命令 reset 对于绘制正弦曲线不是必要的。它移除先前所有 set 命令的效果并恢复默认值。因此,在本例中,它将使用默认 x 范围。
现在让我们尝试一些更奇特的东西:plot sin(x)/x。您应该看到如下所示图形:
使用的最后一个命令 reset 对于绘制正弦曲线不是必要的。它移除先前所有 set 命令的效果并恢复默认值。因此,在本例中,它将使用默认 x 范围。
现在让我们尝试一些更奇特的东西:plot sin(x)/x。您应该看到如下所示图形:
图 3. sin(x)/x
从刚才这三个简单的例子,您可以看到" gnuplot 能够理解 pi 并具有丰富的自带数学函数词汇表。它甚至知道非常有用的管理正态分布的统计函数,以及深奥的特殊函数,如朗伯
、贝塞尔、beta 和 gamma 函数(还有更多!),这些函数通常仅在 mathematica 等功能齐全的数学工具中才会有。根据经验,语法与 C 中的语法相似,C 中的语法又与平常数学中使用的语法相似。(一个重要的不同是指数的表示法:为了方便,x 的 y 次幂写为 x**y)。
接着,将图命名为(“My First Graph”),并命名轴(x 轴是“angle, in degrees”,y 轴是“sin(angle)”)。
清单 2. 命名图和轴
set title "My first graph"
set xlabel "Angle, \n in degrees"
set ylabel "sin(angle)"
plot sin(x)
接着,将图命名为(“My First Graph”),并命名轴(x 轴是“angle, in degrees”,y 轴是“sin(angle)”)。
清单 2. 命名图和轴
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"(放在引号中)、 和 。
清单 3. 改变轴上 tic 并设置网格
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
现在,我们注意到 x 轴实际没有标记为度数,看起来不是很好。要修改此问题,通过调整 x 轴上的 tic 标记,使指定的(主)标记仅以 90 度增加和辅标记以 45 度增加。主 tics 的“级别”为 0,这是默认值;辅 tics 的级别为 1。每个点分别由一个 3 元组指定:"label"(放在引号中)、 和 。
清单 3. 改变轴上 tic 并设置网格
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)
set ylabel "sin(angle)"
plot sin(x)
图 4. 带有 tics、标题、网格和标签的轴的 sin(x)
注意对" +45 度和 -45 度辅标记使用了空标签 ("")。还要注意我们不必以任何顺序列出点。像 gnuplot 中的其他所有项一样,xtics 命令功能非常多,具有方便的选项,用于以固定增量创建 tic 标记(在对数标度中为正常倍数),以及用于时间相关数据的特殊格式。查看 help set xtics 中的例子可以获得更多信息。
作为边注,注意我们使用反斜杠将 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 o
顺便说一下,我们提供的所有例子都可以在交互模式或批处理模式下运行。要以交互模式运行,在提示符中输入每个命令。要以批处理模式运行,将命令输入或添加到文本文件中,然后在 gnuplot 提示符中使用 load 'filename' 读入文件,或者在 shell 提示符下将其作为参数提供给 gnuplot:$ gnuplot filename。使用第二种方法,gnuplot 会在执行输入文件中的所有命令后退出,所以当直接绘图到文件中(请参见下一节)时,采用批处理模式执行特别有效。如果在屏幕上绘图时使用第二种方法,输出窗口一出现(当 gnuplot 退出时)就会消失,所以您需要使用显式的“pause -1”命令(请参阅 help pause)来保持窗口。
批处理模式操作中使用的 Gnuplot 命令文件往往停留一会,从而帮助使用注释来提高可读性。# 后面的直到行结束的内容是注释。所以在示例清单 3 中,gnuplot 不处理 we want o
nly one cycle。
终端设备 —— 题外话
在启动时,您可能注意到终端类型设置为 X11。Gnuplot 采用标准设计,可以在多个终端设备上绘图。这包括直接打印到多种打印机中,包括 Epson、HP 和 Imagen 打印机。它甚至可以在伪设备中绘图,如 postscript 和 png。这主要涉及生成输出文件,而不是可查看文件或打印输出。这是将您的图表包含在其他报表中的一种技巧。虽然我还没有发现在 Windows 中与在 Linux 中有什么不同,本文档建议您在设置输出文件名之前先设置终端类型:
清单 4. 设置输出和终端类型
set terminal png # gnuplot recommends setting terminal before output
set output "output.png" # The output filename; to be set after setting
清单 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 在将双引号中所括的字符串传送到终
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 在将双引号中所括的字符串传送到终
端驱动程序之前,先对其进行反斜杠处理)。现在,您可以使用 \} 将输出文件包含在 LaTeX 文件中。要在 PostScript 终端中获得相同的结果,使用相应的 PostScript 命令:{/Symbol q}。在 enhanced PostScript 和 LaTeX 中,您可以使用表示法 x^{superscript} 和 x_{subscript} 得到上标文字。还要注意缩写的终端和输出命令:
清单 5. eps 驱动程序的能力
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 文件示例。
清单 5. eps 驱动程序的能力
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。
鼠标支持还支持一组有用的热键:如果先前对图进行了放大,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 命令用于在同一输出屏幕或文件中生成多个图。
# 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 命令用于在同一输出屏幕或文件中生成多个图。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论