打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Gnuplot (六) 坐标系统 标签 边框
本文大部分摘录于瞬间集博客:http://blog.sciencenet.cn/u/yusufma

我们现在知道了 gnuplot 有第一(first)和第二(second)两套坐标系统,但是 gnuplot 的坐标系统还不止于此。除此之外,它还有 graphscreen 和 character 三套坐标系统。

graph 和 screen 都是归一化的坐标系统。graph 以坐标轴包围区域为界,左下角为 0,0,右上角为 1,1screen 以整个图片区域为界,左下角为 0,0,右上角为 1,1

character 顾名思义,是以字符大小为单位长度的坐标系统,因此它的单位长度依赖于字体大小。它的原点位置和screen 相同。

下面我们结合 label 命令来了解一下这几个坐标系统。我们之前讲过 xlabel 和 ylabel。而这里的 label 命令,是在图中任何地方插入文字标签。还是来看例子:

gnuplot> sinc(x) = sin(pi*x)/(pi*x)
gnuplot> set xlabel "X"
gnuplot> set ylabel "Y"
gnuplot> unset key
gnuplot> set samples 500
gnuplot> set xrange [-5:5]
gnuplot> set xtics 1
gnuplot> set x2range [0:10]
gnuplot> set x2tics 1
gnuplot> set y2range [-2:5]
gnuplot> set y2tics 1
gnuplot> set grid
gnuplot> set label 1 "Hello first" at 2,0.5
gnuplot> set label 2 "Hello second" at second 2,0.5
gnuplot> set label 3 "Hello graph" at graph 0.2,0.5
gnuplot> set label 4 "Hello screen" at screen 0.2,0.5
gnuplot> set label 5 "Hello character" at character 10,5
gnuplot> plot sinc(x)


这里我们画一个 sinc 函数图像。为了说明问题,我们把第二坐标系也都标示了出来,虽然函数图像并没有用到第二坐标。其他命令前面都讲过了,这里只看五个 set label 命令。set label 之后紧跟的那个整数,就是一个标识符,用以区别各个 label,可以随便选个整数。在字符串之后,at 参数指定标签坐标。默认为 first 坐标系统,也可以使用其它坐标系统。下面是生成的图片:

为了帮助大家理解,我们把 graph 和 screen 各自的坐标区域分别用绿色和橙色表示了出来。

标签文字的默认对齐方式为居左,也就是指定的坐标位置在文字的左边。我们也可以在 label 命令里选择其他对齐方式。除此之外,我们还可以在 label 命令里指定文字颜色,旋转文字,或者在指定坐标位置处加一个点。下面例子中的每个参数不必一一解释了,因为和我们前面接触过的命令都是一致的:

gnuplot> set label 1 "Hello red left" at 2,0.4 left textcolor rgb "#FF0000"
gnuplot> set label 2 "Hello green center" at 2,0.5 center textcolor rgb "#00FF00"
gnuplot> set label 3 "Hello blue right" at 2,0.6 right textcolor rgb "#0000FF"
gnuplot> set label 4 "Hello rotate" at -2,0.4 rotate by 45
gnuplot> set label 5 "Hello point" at -3,0.2 point pt 7 lc rgb "#FF9900"
gnuplot> replot


我们现在所有绘图的坐标刻度均标在图像边框上,无论上下左右。这样做的好处是函数或数据图线清楚,不会和坐标标注混在一起。其实,我们小时候数学课上最早学习坐标系的时候,都是让 X 轴和 Y 轴正交于原点,而刻度标注在坐标轴上。这样的图像在定性表现函数关系,尤其有一定对称性的函数关系时,比较一目了然。

让我们来看看怎样用 gnuplot 得到这样的效果。
  1. 用 unset border 命令把边框去掉;
  2.  set zeroaxis 命令画出正交于原点的坐标轴;
  3. 在设定坐标刻度时加上 axis 参数,这样刻度会出现在坐标轴上面,而不是边框上。
为了避免审美疲劳,这次我们拿高斯函数举个例子:

gnuplot> set term wxt enhanced font "Times New Roman,16"
gnuplot> gauss(x) = exp(-pi*x*x)
gnuplot> set title "函数 e^{-πx^2}"
gnuplot> set samples 500
gnuplot> set xrange [-3:3]
gnuplot> set yrange [-0.2:1.2]
gnuplot> unset key
gnuplot> unset border
gnuplot> set zeroaxis lt -1 lw 2
gnuplot> set xtics axis -2,1,2
gnuplot> set ytics axis 0,1,1
gnuplot> plot gauss(x) lw 3


例子中的参数前面都介绍过,如果不记得了,可以复习一下“坐标取值范围及刻度”和“点线风格”等章节。这里的图像已经很像模像样了,除了标签位置还不那么理想,而且坐标轴没有箭头。幸好,我们上一讲刚刚谈到过箭头,下面来试试做一下微调:

gnuplot> set title "函数 e^{-πx^2}" offset 12,-5
gnuplot> set xtics axis -2,1,2 offset 0.4,0
gnuplot> set ytics axis 0,1,1 offset 0,0.4
gnuplot> set arrow 1 from 2,0 to 3.2,0 filled size 0.2,15,60 lw 2
gnuplot> set arrow 2 from 0,1 to 0,1.22 filled size 0.2,15,60 lw 2
gnuplot> set rmargin 4
gnuplot> set label 1 "X" at 3.0,-0.1
gnuplot> set label 2 "Y" at -0.3,1.2
gnuplot> replot


这里有几个命令同时用到了新的参数:offset。它的作用就是把命令里提到的标签文字平移一段距离。在这里,offset默认的坐标系统是 character。我们慢慢会体会到这种做法的好处,它使得我们很多时候改变字体大小,而不必重新设置 offset

另外,set rmargin 命令用于设置图像右边空白宽度,单位也是 character。一般情况下,四边空白宽度都是自动设置的。现在我们在右边增加了箭头,而绘图显示区域不会因此自动扩大,这样会导致箭头无法完整显示,所以要手动改一下设置。相应的,上、左、下边的空白宽度,分别由 tmarginlmarginbmargin 参数控制。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[转载]Latex相关资源汇总(原创)
Gnuplot|01 曲线图
Gnuplot 常用绘图功能简单介绍
NS2简单又经典的入门教程
【资源】Matlab GUI(图形用户界面) 的心得, 附 <编程中文参考手册>
动手实践系列:CV语义分割!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服