linux中gnuplot给定文本,gnuplot笔记(三)

>第三章

1. 数据文件中的空行

单个空行:表示同一个数据集中的不连续处,即单个空行前后的数据,在绘制时不会连起来

双空行: 表示两个数据集的分隔。

注释: 和linux中大多数配置文件一样,注释行是以#符号开头,注释行直接被忽略

2. index指令

一个数据文件中可以有多个数据集,用双空行来分割,绘图时用index指定。

plot 'datafile' index 0:5:2 using 1:2index的三个参数分别为: 起始数据集,终止数据集,步长。因此,上面的命令只绘制0,2,4三个数据集。注意,第一个数据集标号为0.

起始数据集和终止数据集指定一个区间,但终止行和步长可以省略. 也就是说如果只有一个参数,那么只画那一个数据集;如果有两个参数,画一个区间;如果有三个参数,则只绘该区间内某些数据集。

index是放在using之前的,因为只有指定的数据集,才可以选择列

3. every指令

间断地绘制某些行

plot 'datafile' every 2 using 1:2上面的命令,在数据集中每隔两行进行绘制,也就是绘制0,2,4,...行

every命令也可以指定起始行,终止行和步长,但格式和顺序和index有所不同

plot 'datafile' every 2::1::5 using 1:2上面的命令绘制1,3,5行。显然第一个参数是步长,第二个参数是起始行,第三个参数是终止行。三个参数用::分隔,而后两个两参数可以省略。第一行同样标号为0。

4. smooth指令

smooth指令可以有多个参数,分别是unique,frequency, bezier, sbezier, csplines, acsplines. smooth指令必须置于using指令之后

unique: 先将using选定的数据进行排序(按x), 然后消除重复的点(即x相同的点), 消除的方法是取平均值。

frequency: 和unique不一样,frequency对每个x取统计结果,比如将相同x的多个y值进行求和,因此,这个命令可以统计频率,制作直方图

bezier: 绘制N阶贝赛尔曲线,N为点数

sbezier: 相当于先使用unique排序,消除重复点, 然后再使用bezier

csplines: 先使用unique,然后再画三次样条曲线

acsplines: 先使用unique, 然后画加权三条样条曲线,权重由using第三个参数指定, 如plot "datafile" using 1:2:($3) smooth acsplines权值必须大于0,越大越弯曲,当趋近于0时,得到一条近似直线,用这个方法可以拟合直线。

5. 数学支持

5.1 查看用户定义的函数: help functions

5.2 系统提供的分布函数脚本: 我的在/usr/share/doc/gnuplot-doc-4.2.6/demo/stat.inc, 里面有统计时常用的分布函数,可以这样载入

load '/usr/share/doc/gnuplot-doc-4.2.6/demo/stat.inc'5.3 伪随机数生成

伪随机数的生成信赖于两个种子

rand(0)     # 生成下一个伪随机数,使用默认的种子

rand(-1)    # 重置种子为默认值

rand(x)     # 如果x>0, 重置两个种子为x

rand({x,y}) # 如果x,y>0, 重置第一个种子为x, 第二个种子为y

rand函数和其它函数一样,只能用于表达式,直接输入rand(0)是会报错的,但是可以打印出来

print rand(0)

5.4 定义常数

直接用等号赋值

e=2.7185.5 定义函数

f(x)=-x*log(x)

gauss(x,m,s)=exp(-0.5*((x-m)/s)**2)/sqrt(2*pi*s**2)

binom(n,k) = n!/(k!*(n-k)!)

min(a,b) = (ag(x)=sin(a*x)定义函数同样很简单,可以看出gnuplot中的表达式也很直观,常用的运算符都支持。注意最后一个函数中用到一个并不存在的变量a,但是不要紧,只要在实际使用的时候指定就行了,比如

plot a=1,g(x),a=2,g(x)5.6 自变量(dummy variable)

即x坐标轴对应的变量,默认情况下是x, 这也是为什么plot sin(x)这样简单的命令可以执行的原因。用户可以自行指定为其它变量

set dummy t

plot sin(t)5.7 复数

复数1+2i可以表示为

z={1,2}实部函数为real(z), 虚部函数为imag(z)

print real(z),imag(z)复变函数中支持的常见函数在gnuplot中也支持

print sin(z),cos(z),exp(z)但是,复数的两个分量只能是常量,而不能是变量或表达式,但是,可以灵活处理

plot real(exp(x*{0,1})), imag(exp(x*{0,1}))

6. 数据变换

using指令中,一对小括号内是一个表达式。表达式中引用某一列使用$符号。这样,用户就可以比较灵活地对某列或某几列数据进行绘制前的处理。

plot "datafile" using 1:(sqrt($2)) with lines

plot "datafile" using (log($1)):(log($2)) with linepoints

plot "datafile" using 1:($2+$3) w lp

plot "datafile" u 1:($2>0?log($2):0) w l

plot "datafile" u 1:(1) smooth frequency w l注意,最后一条命令,表达式可以是常量,这条命令相当于绘制直方图。

7. 列操作

每列都是有一个标号的,第一列是1,第0列则表示行号,第-2列则表示数据集的编号。

在数据文件中,每当遇到一个双空行,数据集编号加1,而行号变成0.

column(x)函数相当于$x,但是这里的x可以是一个表达式, 而且对于-2列来说,只能使用column(-2).

valid(x)函数的作用是看x列的当前行数据是否合法。

8. 采样率

在画函数或使用smooth指令时,系统会拟合曲线,这些曲线的采样率由下面的命令指定

set samples 400注意,采样率在400左右工作地比较好,但不要超过显示区域屏幕的水平分辨率(一般是600),超过水平分辨率不会产生预期的效果的。

9. 裁剪

点和线可能会越过边界,如果取舍,需要裁剪一下。使用set clip命令。

裁剪掉碰到或覆盖边界的点

set clip points裁剪穿越边界的线段

set clip one|twoset clip one或set clip two这两条命令表示什么意思,我没看懂,暂时好像也用不到!==

10. 未定义值

gnuplot支持未定义值,绘图时直接忽略。利用这一点,可以减少绘图时的点的数目,特别是和?:运算符结合起来。

f(x)=abs(x)<1 ? 1 : 1/0

plot f(x)

11. 对数坐标

当数据呈对数分布时,采用对数坐标是比较好的。没学过的,直接略过吧。

set logscale       # both x and y

set logscale x     # only x

set logscale y     # only y

set logscale y 2   # only y, and set base to 2(default 10)

unset logscale

unset logscale x

unset logscale y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值