<>第四章

1. 设置命令
主要有set,unset,reset三个,显示设置的命令是show

set style function points
unset style function points
show style function
reset 


其中reset将所有设置恢复为默认状态(terminal和output除外)。
显示所有选项

show all


显示详细版本信息(包括版权,联机文档,编译时的选项)

show version long


2. 数据文件中的换行应该和本地操作系统和关,比如linux下就应该使用linux的换行符(\n),windows下就应该使用windows下的换行符(\r\n)

3. 数据文件中的数字格式
和C语言没有什么两样,如浮点格式:1.7e-2
但是gnuplot也能识别Fortran格式的浮点型: 1.7d-2或1.7q-2, 对于这种格式,需要事先指定

set datafile fortran


4. 数据文件中的注释
注意,是数据文件中的注释,而不是脚本文件中的注释。
默认是#符号,但必须是该行的第一个字符,否则将不视为注释(这一点和脚本中的注释是不一样的)。注释行被gnuplot直接忽略。
标识注释的符号实际上由一个内部选项commentschar控制

show datafile comments          # NOTE: comments not commentschar

由上面的命令可知道,commentschar的值默认为"#",该值也是可以改变的

set datafile commentschar "#!"

可以指定多个符号,上面的命令表示,#或!都可以作为注释符号。显然,这里如果只指定一个符号,则原来的"#"就会被覆盖掉。
另外,为什么"show datafile comments"中不能使用commentschar?我也很费解。

5. 数据文件中的域分隔符
域分隔符其实就是列分隔符,默认情况下是一个或多个空白字符(空格, 制表符, 换行符)。

show datafile separator

上面的命令默认情况下会显示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版本是否支持字符串操作

show version long

在该命令的结果中寻找+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

注意,上面的点运算符(.)表示字符串的拼接。

b = "Hello "."world"

字符串也有比较运算符: 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 sin(0.3*pi)

默认情况下,print函数输出到STDERR,但这个输出流是可以改变的

set print                        # print to STDERR, default
set print "-"                    # print to STDOUT
set print "filename" [append]    # print to file,append is optional


除了print可容易地产生本文之外,将将要绘制的每个点输出到文本文件中是另外一种方式。

set table "tablefile"

如果plot使用的数据读自文件,那么读进来哪些点就输出哪些点,不会凭空生成。对于绘制函数或用smooth指令进行拟合时,输出哪些点是由set samples来控制的。
输出文件是有一定格式,其中有一些标识符: i表示在显示范围内,o表示在显示范围外,u表示未定义
最后,要想恢复原来的状态,不要忘了unset

unset table



14. 命令的历史
在命令行模式下,使用过的命令都会保存到一个历史命令缓存中,缓存的大小由historysize选项决定

set historysize 666

因此,按Up方向键会往前翻,按Down方向键会往后翻。�状往命
history命令用来显示命令历史

history [quite] [max] ["filename" [append]] 

quite表示不显示序号,因为默认情况下是显示序号的。max表示最多打印最后的max个命令,filename则表示不输出到终端而是输出到文件,而append则是表示在输出到文件的情况下,采取附加的方式,而不是覆盖。
history还可以用来搜索命令

history ?"set term"

该命令搜索历史中所有以"set term"开头的命令,并显示出来

history还可以通过匹配,然后执行最近的一条匹配的命令

history !"set term"

该命令搜索历史中开头为"set term"的命令,然后执行最近的一条。

15. 图形显示时的热键
在使用plot或splot命令之后,在终端未改的情况下,会弹出一个显示图像的图形界面。该界面是有一些快捷键的。
空格键,就会从图形界面转为命令行界面,但这个功能在我的系统上没能实现,!==
l键,仅将y轴变成对数坐标
L键,将与鼠标最近的坐标轴变成对数坐标
r键,在鼠标的位置上生成一个大“十”字,用来更清晰地显示坐标。
g键,网格
u键,取消前一次放大动作
h键,显示帮助

放大图像的方法: 右键选择一个矩形区域,然后按左键
默认情况下,鼠标功能是打开的,如果没有打开,使用下面的命令打开。

set mouse



16. 交互式输入数据
即从命令行输入数据,这当然是不方便的,但是在脚本批处理模式下是很方便的。

plot '-'

上面的命令表示按照提示手动输入数据,输完一行按回车转到下一行,以EOF符结束(linux下是Ctrl-D)。
09-25 02:44