>第四章
1. 设置命令
主要有set,unset,reset三个,显示设置的命令是show
如
set style function points unset style function points show style function reset |
其中reset将所有设置恢复为默认状态(terminal和output除外)。
显示所有选项
显示详细版本信息(包括版权,联机文档,编译时的选项)
2. 数据文件中的换行应该和本地操作系统和关,比如linux下就应该使用linux的换行符(\n),windows下就应该使用windows下的换行符(\r\n)
3. 数据文件中的数字格式
和C语言没有什么两样,如浮点格式:1.7e-2
但是gnuplot也能识别Fortran格式的浮点型: 1.7d-2或1.7q-2, 对于这种格式,需要事先指定
4. 数据文件中的注释
注意,是数据文件中的注释,而不是脚本文件中的注释。
默认是#符号,但必须是该行的第一个字符,否则将不视为注释(这一点和脚本中的注释是不一样的)。注释行被gnuplot直接忽略。
标识注释的符号实际上由一个内部选项commentschar控制
show datafile comments # NOTE: comments not commentschar |
由上面的命令可知道,commentschar的值默认为"#",该值也是可以改变的
set datafile commentschar "#!" |
可以指定多个符号,上面的命令表示,#或!都可以作为注释符号。显然,这里如果只指定一个符号,则原来的"#"就会被覆盖掉。
另外,为什么"show datafile comments"中不能使用commentschar?我也很费解。
5. 数据文件中的域分隔符
域分隔符其实就是列分隔符,默认情况下是一个或多个空白字符(空格, 制表符, 换行符)。
上面的命令默认情况下会显示whitespace。同样,这个选项也是可以设置的
set datafile separator "," |
注意,这个地方就只能设置为单个字符了。
下面两条命令是等价的,都是恢复到默认状态
set datafile separator whitespace set datafile separator |
6. 数据文件中的缺失值
默认情况下,空白被当成是分割符,这里需要指定缺失值。
set datafile missing "NaN" |
我尝试了一下,这个指定暂时没发现有什么意义,只要数据文件中有个占位的字符串,好像都被处理为缺失值。
plot命令的有两种对待缺失值的方式
plot "datafile" using 1:2 w lp # continuous plot "datafile" using 1:($2) w lp # discontinuous |
前者直接忽略缺失值,但依然有直线相连;后者虽然也忽略缺失值,但缺失值前后是不相连的。
7. 数据文件中的字符串
列分隔符(默认是空格)如果出现在数据文件中的字符串中(字符串数据,不包括注释),必须用双引号括起来。
gnuplot支持使用scanf函数读取数据文件,也支持读取二进制文件。具体如何不详。
8. 检验当前gnuplot版本是否支持字符串操作
在该命令的结果中寻找+DATASTRINGS和+STRINGVARS这两个编译标志。如果有则说明支持字符串处理
9. 字符串
下面是合法的字符串
a = 'this is a string' b = "First line\nSecond line" c = "Double quote\" escaped" d = 'single quote'' escaped' |
这里说明一下,命令中的字符串和数据文件中的字符串是两码事,不要弄混了。
注意在单引号中是不能识别转义符(\)的,在双引号表示的字符串中出现双引号时使用转义符,而在单引号表示的字符串中出现单引号时要用两个单引号转义。
10. 字符串操作
整数可以隐式转成字符串,数字格式的字符串也可以隐式转为数字。
绰号如果列
x = '3.14' y = x + 2 # y=5.14 a = 4 b = a."foo" # a should be integer |
注意,上面的点运算符(.)表示字符串的拼接。
字符串也有比较运算符: eq, ne
c = a eq b ? "same":"different" # is equal d = a ne b ? "different":"same" # is not equal |
gnuplot中的字符串同样可视为一个字符数组,注意:第一个字符的下标是1
a = "Gnuplot" b = a[2:3] # b = "nu" c = a[2:] # c = "nuplot" d = a[:4] # d = "Gnup" |
还可以自定义字符串函数
head(s) = s[1:3] a = head("January") # a = "Jan" |
其它内置函数:strlen(s), substr("str",i,j), strstrt("str","key"), words("str"), word("str",n), sprintf("format", ...), gprintf("format",...), system("cmd")
其中system函数是执行操作系统的命令。
11. 从数据文件中读取字符串作为标签
这个用法具体是指给每个点指定一个字符串显示在图上,就像地名一样。
因此,需要用using指定第三列字符串数据,当然这三列也可以用其它方法生成,比如stringcolumn函数。
plot "datafile" using 1:2:3 with labels plot "datafile" using 1:2:(stringcolumn(2)) with labels |
stringcolumn(N)和column(N)函数一样,都是得到当前行第N列的数据,只不过前者返回一个字符串,后者返回一个数。
除了数据点的标签,刻度也可以有标签. 下面的命令中的xticlabels的作用类似于stringcolumn函数,但这里的xticlabels貌似不是一个函数,而更像一条指令,即指定第三列为刻度标签。
plot "datafile" using 1:2:xticlabels(3) with lines
|
12. 指定图例字符串
plot "datafile" using 1:2 title "titleString" with lines |
13. 产生文本输出
使用print函数。
默认情况下,print函数输出到STDERR,但这个输出流是可以改变的
set print # print to STDERR, default set print "-" # print to STDOUT set print "filename" [append] # print to file,append is optional |
除了print可容易地产生本文之外,将将要绘制的每个点输出到文本文件中是另外一种方式。
如果plot使用的数据读自文件,那么读进来哪些点就输出哪些点,不会凭空生成。对于绘制函数或用smooth指令进行拟合时,输出哪些点是由set samples来控制的。
输出文件是有一定格式,其中有一些标识符: i表示在显示范围内,o表示在显示范围外,u表示未定义
最后,要想恢复原来的状态,不要忘了unset
14. 命令的历史
在命令行模式下,使用过的命令都会保存到一个历史命令缓存中,缓存的大小由historysize选项决定
因此,按Up方向键会往前翻,按Down方向键会往后翻。状往命
history命令用来显示命令历史
history [quite] [max] ["filename" [append]]
|
quite表示不显示序号,因为默认情况下是显示序号的。max表示最多打印最后的max个命令,filename则表示不输出到终端而是输出到文件,而append则是表示在输出到文件的情况下,采取附加的方式,而不是覆盖。
history还可以用来搜索命令
该命令搜索历史中所有以"set term"开头的命令,并显示出来
history还可以通过匹配,然后执行最近的一条匹配的命令
该命令搜索历史中开头为"set term"的命令,然后执行最近的一条。
15. 图形显示时的热键
在使用plot或splot命令之后,在终端未改的情况下,会弹出一个显示图像的图形界面。该界面是有一些快捷键的。
空格键,就会从图形界面转为命令行界面,但这个功能在我的系统上没能实现,!==
l键,仅将y轴变成对数坐标
L键,将与鼠标最近的坐标轴变成对数坐标
r键,在鼠标的位置上生成一个大“十”字,用来更清晰地显示坐标。
g键,网格
u键,取消前一次放大动作
h键,显示帮助
放大图像的方法: 右键选择一个矩形区域,然后按左键
默认情况下,鼠标功能是打开的,如果没有打开,使用下面的命令打开。
16. 交互式输入数据
即从命令行输入数据,这当然是不方便的,但是在脚本批处理模式下是很方便的。
上面的命令表示按照提示手动输入数据,输完一行按回车转到下一行,以EOF符结束(linux下是Ctrl-D)。