gnuplot 学习小计2-时间、文件、数据选择、平滑

本次要点:

用时间类型数据作为坐标轴。

说明文件中的数据格式。(比修改间隔符的方法更能应对复杂格式)

选择性提取文件中的数据。

图、轴、曲线的名字。

数据平衡操作。


1,使用时间数据作为x坐标

可以使用:

set xdata time
设置x坐标轴为时间数据,对于其他坐标轴也是一样。

默认格式是 “年/月/日”

可以通过命令:

set timefmt “%Y-%m-%d”
来修改。

具体的格式化字串如下:

格式

解释

%d

day of the month, 131

%m

month of the year, 112 

%y

year, 099

%Y

year, 4-digit

%j

day of the year, 1365

%H

hour, 024

%M

minute, 060

%s 

seconds since the Unix epoch (1970-01-01 00:00 UTC)

%S

second, integer 060 on output, (double) on input

%b

three-character abbreviation of the name of the month

%B

name of the month



















如果需要取消x轴的时间形式 可以使用:

set xdata

命令来重置。


注意:如果要在所绘制的图像中使用时间信息现实坐标轴,还需要使用:

set format x "%y/%m/%d" 

命令还设置在图中显示x轴所用的格式。


对于时间数据,同样可以使用中括号来生产一个range,例如在上面的格式下,可以这样生产一个时间区间:

["2011-01-01":"2011-04-01"]


2,文件中的变量操作(以及格式说明)

其实这种需求对于日期数据做坐标轴的需求主要来自于文件,同样对于文件我们有时候不仅仅是要把某个维度现实出来,还要在现实的时候做一些操作。

basic:

数据文件中的不能随便空行,需要间隔的时候可以使用“#”注释某一行,因为各个空行是有含义的:

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

双空行:表示两个数据集的分隔,不同数据集的数据认为是间断的,即使用一条plot语句会对每个数据集各画一条线,而且它们的style都是相同的。

文件一行一个数据条目,一个数据条目里面可以有若干个维度,各个维度之间默认支持可以用空格或制表符隔开。在gunplut的命令里面通过“$x”来引用。gnuplot会自动生成一个伪列“$0”,它的值从0开始,可以理解为表示每个数据在文件中的行号。然后其他数据依次是“$1”、“$2”、“$3”等。当不做操作而直接引用的时候可以直接写0,1,2等。

引用某个维度的时候需要使用using关键字,例如我要显示文件a.txt中的第一列,可以用:

plot 'a.txt' using 1
或
plot 'a.txt' using 0:1
或
plot 'a.txt' using 0:($1)

其中第二种形式表示用伪列0做x轴,而第一种形式默认使用它做x轴,第三种形式是使用变量引用的形式。


数据格式

有时候由于数据格式的问题(尤其是我们常用的CSV格式),gnuplot会无法读入我们的数据(对于CSV格式只能读入第一列),需要我们手动指定数据的输入格式,具体方法是在using x:x之后加入双引号括起来的格式字符串。

例如:

plot 'a.csv' using 1:2 "%lf,%lf"

格式串中的占位符和c语言中一样。(但是不支持%f,即可以理解为没有float而全都是double)。


如果只是要应对CSV格式那么使用小记3(http://blog.csdn.net/yanxiangtianji/article/details/8826801)中“修改间隔符”的方法更方便。

文件过滤

有的时候不需要使用文件中的所有数据,可以使用一些关键字来过滤一下。注意 它们一般要放在using之前,表示先选择了数据再选择数据中的列。


index关键字,它用于选择数据集,接收1到3个参数,依次表示起始的数据集号(从0开始),终止数据集号,步长,例如:
plot 'a.txt' index 3:10:3 using 1:2 with line
表示画第3、6、9个数据集的数据。
各个数据集内部的数据是一条线,不同数据集是不同的线,但是它们的颜色(style)是一样的。

every关键字,它有1个参数,表示每x个数据取一个(从0开始)。
例如:
plot 'a.txt' every 3 using 2
表示画0、3、6、9、12、……行的数据
every关键字也接受3个参数,表示步长,起始行号,终止行号;注意是用两个冒号隔开而不是1个。
例如:
plot 'a.txt' every 3::3::10 using 2
表示画第3、6、9行的数据。

操作各个变量

如果需要对某些维度的值进行计算之后,将它的结构作为要显示的值,那么需要使用$x的形式引用那个列,在using中不能直接让$x与其他值并列出现,至少要有括号包裹。

可以使用函数,或者具体表达式表示某个新的维度。

例如:

plot 'a.txt' using 1:($1*10-$2/3)
#假设已经定义了一个函数fun,它接受3个参数
plot 'a.txt' using 0:fun($1,$2,$1+$2)


3,名字

线的名字:

绘图命令后面加title关键字
例如:
plot sin(x) title 'my line'

图的名字:

使用set title 命令
例如:
set title 'my graph'
plot sin(x) title 'my line'

坐标轴的名字:

使用set xlabel或ylabel命令
例如:
set xlabel 'x-time'
set ylabel 'y-volume'


4,平滑

在绘图命令最后加smooth关键字后加方法(和with关键字一样),它相当于自带with line命令,但是它和with关键字不冲突,可以在手动指定with选项。

unique:先将using选定的数据进行排序(按x),然后消除重复的点(即x相同的点),消除的方法是取平均值。
frequency:和unique不一样,frequency对每个x取统计结果,比如将相同x的多个y值进行求和,因此,这个命令可以统计频率,制作直方图。
bezier:绘制N阶贝赛尔曲线,N为点数。
sbezier:相当于先使用unique排序,消除重复点,然后再使用bezier。
csplines:先使用unique,然后再画三次样条曲线。
acsplines:先使用unique,然后画加权三条样条曲线,权重由using第三个维度指定,即using关键字后面要有3个维度,且权值必须大于0。权值越大越贴近原来的折线,越小越平。
例如:
plot 'a.txt' using 1 smooth bszier
replot 'a.txt' using 1 with impulse
replot 'a.txt' using 0:1:2 smooth acsplines




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值