gnuplot:试用笔记

27 08月 2009 | 4:51 | using ubuntu | No Comments

把官网上的Quick Referece卡片打了出来,基本上是manual的简明版。把plot、set range、set title等最基本的命令解释看了看,又把set下的各种属性在本本上逐个敲了敲,得到了一些感性经验,现列于下。gnuplot的集中学习就到此为止吧,各种小经验在要实践中掌握和总结了。
1. 可set者即可show,可以不停先做出图,再通过(show-)set循环不停调整各种属性,直到满意。
2. 二维作图中常用set项及其简单句法,{}表示该项为可选,|表示只能从中选出一项,()内的内容表示直接用于输入的文本,或所输入文本的意义,expression为数字,…为文字和数字的混合字串,比如set key at 1,0。
angles [degrees|radians]
arrow [<tag>][from <sx>,<sy>,<sz>][to <ex>,<ey>,<ez>][head|nohead|heads]
autoscale [<axes>]
parametric
border [<choice>] [<style>]
clip <clip-type>
style <style-choice>
dummy <dummy1>,<dummy2>…
format [<axes>]["format-string"]
grid [<which tics>...] [<linestyle>]
key [... ]
logscale <axes> [<base>]
offsets <left>,<right>,<top>,<bottom>
samples <expression>
size <xsize>,<ysize>
terminal <device>
tics <direction>
ticslevel <level>
ticscale [<size>]
time [...]



gnuplot:manual 43.59.7, 8译文,设置样式boxerrorbars, boxes, boxxyerrorbars

29 07月 2009 | 21:39 | using ubuntu | No Comments

今天总算把实验结果和初步分析给了老板,老板看了以后很快表态要买那台仪器,这正是一直在努力做实验和分析的最终目的,所以很有成就感。细想来这次分析全是在UB里完成的,从利用shell命令提取数据到ooo做表格、幻灯片和最后给老板看的文档,上手都挺快,除了少数不适应外,效率一点不比WinXp低,反而感觉因为调用程序方便且可利用桌面分散窗口而高效一些。比如很多数据都是直接在终端里cat -n|tail -1出来的,避免了用表格程序打开一个个大文件,不仅节省了时间,心情也因为不用等待而阳光了不少!总之虽然效率高,但是并不觉得非常累,各项在按部就班地前进,而且自己能体会到进度的前进步伐——这大概才是用电脑的正确体验吧?
高兴之余再接再厉,继续学习一点gnuplot的用法吧。根据工作需要,翻译了一段最要紧的有关样式设置的说明。翻译的时候发现官网上的demo栏很不错,提供了不少很酷的实例,有些看到前简直像想不出软件还可以这样用,看来有空时该多去转转。为避免混淆和减小工作量很多词我都没翻出来,直接采用了原文,便于在命令中找到该词。不确定意思的整句留了原文,以“?”开头。

43.59.7 作图样式(style)
命令set style data和set style function可以更改后续的plot和splot命令的默认作图样式。
所有line和point样式的类型(如用于线条的solid, dash-dot, color以及用于点的circle, square, cross等)均可在plot或splot命令中指定(specify),或者在该终端的可用类型中择出。可用命令test查看可用类型。
需要两列以上信息(如errorbars或者errorlines)的样式均不能用于splot或plot功能。类型boxes, filledcurves以及样式steps的任何一种也不能与splot联用。如果指定的是不合适的样式,将被改成points。
如果是plot with labels,则上述各条不适用,因其第三列为数据源,而非坐标信息。可参考style labels (p. 125)。
对于有两列以上的二维数据,gnuplot对所允许的errorbars和errorlines的样式有所要求。可用plot命令中的using选项设置所需样式的适用列。(此节中数据文件的列和using列表里指定的列都用“列”表示。)
如果是三列,则仅允许样式xerrorbars, yerrorbars(或errorbars), xerrorlines, yerrorlines(或errorlines), boxes和boxerrorbars。?If another plot style is used, the style will be changed to yerrorbars。样式boxerrorbars自动计算boxwidth。
如果是四列,则仅允许样式xerrorbars, yerrorbars(或errorbars), xyerrorbars, xerrorlines, yerrorlines(或errorlines), xyerrorlines, boxxyerrorbars和 boxerrorbars。如果使用了非法(illegal)样式,则将自动改为yerrorbars。
如果是五列,则仅允许样式boxerrorbars, nancebars和candlesticks。非法样式将在作图前自动改为boxerrorbars。
六列和七列数据仅允许样式xyerrorbars, xyerrorlines和boxxyerrorbars。非法样式将在作图前自动改为xyerrorbars。
有关带和不带lines的error bar的详细信息请参考plot errorlines (p. 62) and plot errorbars (p. 62)。

43.59.8 Set style [...]



安装字体

29 07月 2009 | 2:09 | basic ubuntu | No Comments

今天有点小忙,主要专注于完成实验结果的幻灯片,为此还给ooo安装了Georgia字体。装的时候又忘了怎么弄了,所以今天就把这个小技巧顺便记下来吧。

1. 建立一个新的fonts目录来存放需要的字体,如:
sudo mkdir /usr/share/fonts/zh_CN
当然也可以在别处建一个文件夹,比如我的是 ~/Documents/fonts,然后在/usr/share/fonts/目录下创建一个链接:
cd /usr/share/fonts
ln -s ~/Documents/fonts fonts
2. 将准备安装的字体复制到/usr/share/fonts/zh_CN,或~/Documents/fonts;
3.安装字体,这两个命令必须要sudo权限:
sudo mkfontscale
sudo mkfontdir
4. 更新缓存:
fc-cache
5. 重启ooo,搞定!



pspp:manual第3章译文

27 07月 2009 | 0:30 | using ubuntu | No Comments

除了奉献精神,GNU也很有幽默感,比如 copyleft的概念及其logo(详见其wiki页)。还比如说该计划下、旨在提供“免费版SPSS”的一个软件,被命名为PSPP。有那么点叛逆的意思,是吧?想用老办法上手PSPP,结果google出一整屏的psp信息。换了好几套关键字,最后失望地发现连英文介绍都很少,可能大家比较喜欢用R之类的软件吧。咬咬牙,自己翻译官方的manual吧。
看了一下目录,初步计划是从第3章翻译到第13章,中间跳过第7章。由于我的目的是尽快上手,故而很多进阶内容(就是看着每个词都见过就是不知道是啥意思的内容 )先留着原文占个座儿,等需要时再现学。为方便理解我将增加使用意译的比例,而非严格地逐字翻译。为方便校对原文没有的语句将以斜体显示。不确定的单词或术语首次出现时将同时给出原文。为免于误人子弟,参考此文时强烈建议怀疑精神和实证精神。
时不我待,现在开始吧,译文如下:

3 启动PSPP
启动PSPP命令句法如下:
pspp [ -B dir | --config-dir=dir ] [ -o device | --device=device ]
[ -d var[=value] | –define=var[=value] ] [-u var | --undef=var ]
[ -f file | --out-file=file ] [ -p | --pipe ] [ -I- | --no-include ]
[ -I dir | --include=dir ] [ [...]



gnuplot:拟合,自定义函数

26 07月 2009 | 16:52 | using ubuntu | No Comments

我使用作图软件主要为了达到两个目的,一是把我的数据用符合学术论文规范的直观方式显示出来,常用的形式有带误差条的柱状、饼状、散点和直方图。第二个目的是做一些简单的曲线拟合,比如线性回归和正态分布等,可惜我不会用matlab之类的数学软件求解。不过gnuplot也提供了拟合功能,这样可以在同一个程序窗口里解决简单的拟合问题。图形样式的介绍在官方manual的第43.59.7、8小节,不过解决拟合的问题似乎更迫切,先介绍一下拟合的基础操作吧。

曲线拟合
gnuplot里的拟合功能由fit命令实现,fit命令将一个用户定义的(user-defined)函数(fuction)拟合到数据点(x,y)或(x,y,z)上。它利用了非线性最小二乘法(NLLS) Marquardt-Levenberg算法(nonlinear least-squares (NLLS) Marquardt-Levenberg algorithm)。关于fit命令的详细说明在manual的第27节,不过太全面了反倒不利于学习,在此我还是借鉴一段一个很棒的台湾老师制作的说明吧:
Fitting 的功能很好用, fit 完成之後, 把成果函数和原始资料画在一起, 可以很清楚地看到资料和预期模型是否吻合。
拟合的过程如下:
f(x) = a*x*x*x + b*x*x + c*x + d # 自定义函數, 此例中为一个三次函数
a=-1; b=1; c=10; d=0 # 设定用于最小二乘法的参数初始值
fit f(x) “xxx” via a,b,c,d # 将文件xxx里的数据用函数f(x)拟合,指明需要优化的值
plot “xxx”, f(x) # 作图,直观比较结果和预期

自定义函数
使用者可以自己定义函數,只需写出这个函数的表达式即,如:
sinc(x) = sin(x)/(x)
作图时可以像其他函数一样调用之,如:
splot sinc(sqrt(x*x+y*y))
可以用 show functions 及 show variables 查詢先定义的函數及变量。

函数

一般来说,gnuplot可以对任何用于 C, FORTRAN, Pascal或者BASIC的数学表达式作图。gnuplot所支持的运算符与C语言的相同,不同的是大多数运算符接受整数,实数和复数形式的参数。 运算符的优先排序遵循C语言里的规则。运算符** (乘幂)用法与FORTRAN中相同。可用括号调整运算顺序。变量默认用x,y,z表示。下表中是gnuplot支持的部分函数:
__________________________________________
函数式 返回值
__________________________________________
abs(x)     absolute value [...]



gnuplot:multiplot模式,运行脚本,gnuplot和linux提示符转换

26 07月 2009 | 2:10 | using ubuntu | No Comments

今天继续学习了gnuplot的一些进阶用法,包括multiplot模式和运行脚本。

multiplot 模式
此模式下用户可以在一屏里面作多张图,如下所示:
set multiplot
设置转到多图模式
set origin 0.0,0.5
设置图的原点的位置。各属性如果不指定设置则沿用前一张图的设置。
set size 0.5,0.5
设置图的大小
plot sin(x) set origin 0.5,0.5
unset multiplot
退出multiplot模式

脚本
为了存储常用命令以节省时间并方便修改,可以把命令全部写到一个脚本里,比如:
# 这个文件里的命令脚本用于对文件‘force.dat’里的数据作图
# 脚本文件名是force.plt
set parametric #参数化作图
set dummy t #设置参数作图的自由变量(独立变量)
set autoscale #自动缩放
set samples 160 #采样率 默认为100
set title “” #标题设置

set key box
set key below #标题等信息的位置
set trange [0.00001:1] #t的范围
set terminal postscript eps color lw 1 “Helvetica” 20 [...]



gnuplot:常用基础命令,plot,set,输出

25 07月 2009 | 2:00 | using ubuntu | No Comments

linux下的一个大损失就是不能用专为发学术paper开发的Graphpad了,于是得找个替代品,不然就得下楼去凑实验室的电脑。看到网上说gnuplot是GNU出品的作图软件,好用易学,于是今天看了看相关内容。好用我不太清楚,易学是没怎么觉得,大概要用到gnuplot的人一般都比较聪明吧。这也是用linux的一个好处,怕麻烦、不肯下功夫钻研的人都被filter掉了,剩下的都是值得我学习的高手。
我用的gnuplot版本是4.2 patchlevel 2,官网提供的pdf版manual整整205页,估计等我看完不是瞎了就是毕业了,还是退而求其次吧。老办法——拾人牙慧!陆续看了一些网页和文件,自己总结出了一些很基础的用法,立此存照吧,以免长时间不用又还给互联网了。

常用基础命令
1. gnuplot
在linux命令提示符下运行gnuplot命令启动。启动后将显示gnuplot>。
2. help
帮助,后面输入相关话题如命令名称即可显示与之相关的帮助信息。
3. quit
相当于“q”,“exit”或者ctrl+d,功能是退出程序。
4. cd “文件夹名“
同linux下cd。
5. plot “文件名“
以文件数据为源数据作二维图,文件名放在一对双号之内,单引号双引号均可。这条规则适用于set命令的绝大多数参数。
6. plot “文件名 1″, “文件名2″
同一张图中对文件1和文件2作图
7. set data style xxx
设置数据表现方式,xxx可以是“lines”, “points”, “linespoints”, “dots”, “impulses”或者“errorbars”。
8. set title “Grand old Title”
将图片名称设为Grand old Title。
set xlabel “Guess what”
将x轴标签设为Guess what。
set terminal XXX
设置输出终端,XXX可以是jpeg, gif, png, x11和postscript。

背景知识
1. 在gnuplot提示符下也可以运行linux命令,但必须在相应的命令前面加上 ! ,如!ls,特殊符号如”-”等则符号前加上 \,如“!ooffice \-calc”。
2. 退出gnuplot后再进入将重新使用默认设置,输入reset也能达到同样效果。
3. 一条命令中,如果缺少某一项的声明则表示该项设置沿用默认值。
4. gnuplot中,如果某几个词前面某几个字母相同,那么只要写到第一个不同的字母就可以代表相应的词了。比如with,由于没有其它以w开头的词,因此可以用 w 代替;同样地,line也可以用 [...]



文件命令:sort

23 07月 2009 | 22:19 | learning ubuntu | No Comments

sort命令的功能是对文件中的各行进行排序,可以将sort命令看作一个数据管理工具,用来管理内容类似数据库记录的文件。命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果仍然相同,将继续进行比较。

命令格式
sort [-选项][文件名]
sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如果输入文件用“-”表示,则从标准输入(即键盘等输入装置)读取。排序是通过从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省设置为以整行为关键字,按照ASCII字符顺序进行排序。

选项
-b——寻找排序关键字时忽略前导的空白,包括空格和制表符
-d——按字典顺序排序,只比较字母、数字、空格和制表符
-M——作为月份比较,如“JAN”<“FEB”,虽然F排在J前
-k 位置1,位置2——以位置1和位置2之间的字符(串)作为排序的关键字,它包括位置1上的字符但不包括位置2上的。位置的表示格式是F.C,其中F表示字段的序号,C表示该字段中字符的序号,均从1开始。需要注意的是可能需要同时选上-b以忽略字段的前导空白
-u——对排序后认为相同的行只留其中一行,相当于cat |sort | uniq
-o [文件名]——将排序结果写到输出文件中,可以是输入文件之一,此时sort命令先将该文件的内容写入一个临时文件,然后再排序和写输出结果
+位置1-位置2——同“-k 位置1,位置2”,见范例2和3

范例
1. sort text >result
对sort排序,把结果写入名为result的文件中
2. sort +1-2 example
以第2个字段作为排序关键字对文件example的内容进行排序
3. sort -r -o outfile +1.0 -1.1 example
对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第1个字符作为排序关键字
4. cat veglist fruitlist | sort > clist
文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中,这是一个利用管道符号使用 sort命令的用法



文件名令:uniq

23 07月 2009 | 20:39 | learning ubuntu | No Comments

使用cat命令将两个文件合并后文件可能包含一至多内容完全一样的行。这时可以使用uniq命令将其删除,使文件里不存在内容完全一样的两行。

命令格式
uniq [-选项][文件名]

uniq命令比较相邻的行,默认删除第一个之后的各重复。行比较遵循的规则是所用字符集的排序序列。输出文件不能为输入文件。如果输入文件用“-”表示,则从标准输入(即键盘等输入装置)读取。

选项

-c——显示输出中,在每行行首加上本行在文件中出现的次数,可代替-u和-d
-d ——只显示重复行
-f n——与-n相同,这里n是一个整数,代表字段数(fileds)
-n ——比较相邻行时忽略前n个字段及每个字段前的空格。字段为一个非空格、非制表符的字符串,彼此由制表符和空格隔开。-n 和+n可以联合使用,此时的计数顺序是向后递推的,见范例6
+n——比较相邻行时忽略前n个字符
-s n——与+n相同,这里n是一个整数,代表字符数(characters)
-u ——只显示文件中不重复的各行

范例
1. uniq test
test文件中连续重复的行仅显示一次
2. uniq -c test
显示test 文件中各行连续出现的次数
3. uniq -d test
仅显示test 文件中连续重复出现的行
4. uniq -u test
显示test文件中仅出现过一次的行
5. uniq -f 1 test
比较时忽略每行的第1个字段
6. uniq -f 2 -s 2 test
比较时忽略每行的前2个字段及其后的前2个字符,即第二个空白字符和第三个字段的首字符

心得
uniq命令的一个重要限制因素在于它只比较相邻行,对于这种执行特点,想要真正地删除重复行,可以先将文件按一定标准排序,这又需要用到sort命令。细想来这么做很巧妙,如若不然,则需要将文件中的每一行与剩余行比较,对于大文件,那样做消耗的计算能力远远地大于sort+uniq。数个命令的联用使得两个相对简单的过程可以完成一个复杂的目的,在此我也对“化繁为简”的妙处有所体会。



文件命令:cat

22 07月 2009 | 15:50 | learning ubuntu | No Comments

我接触linux系统的缘起是为了方便地处理文件,便于分析信息学的实验数据,最近一批实验出了结果,正好是个学习的机会。昨天学了几个命令,所以系统配置的笔记先暂停一下,把要紧的几个命令记录下来吧。以此文为参考的读者请注意笔记仅仅是为了我处理数据文件而服务的,因此各命令的功能介绍并不完全。不过查看完整版的命令说明非常方便,终端里输入man[命令名]即可打开命令的官方帮助文档,按“q”退出,缺陷在于语言是英文。

另外,复杂的处理通常是由多 个命令协作实现的,由于我的学习过程是由目的出发的,因此一篇笔记里经常要牵涉到多个命令。为保持内容的紧凑度,我将在每篇笔记里仅讨论一个命令。
命令cat的全称是catentate,大概由concatentate(意串接,连锁)主要功能有两个:一是用来读取文件(而非目录!)内容并且显示在标准输出(比如屏幕,打印机和新的文件)中,二是用于合并文件内容,生成的文件列数不变而行数 增加。

命令格式
cat [-选项][文件名][参数]

选项
-b 或 -number-nonblank—— 和 -n 相似,只不过对于空白行不予编号
-n 或 -number ——由 1 开始对所有输出的行数编号
-s 或 -squeeze-blank—— 当遇到有连续两行或以上空白行则将其替换成一行空白行

参数
常用的是“>”,用于将输出的文本导向其他目标。默认的标准输出装置是屏幕,而如果想把这些内容保存到文本文件里,就在“>”后指定该文件即可,如果文件并不存在,则命令执行后会生成。

与“>”类似的是“>>”,它们的区别在于“>”用于创建新文件或覆盖已有文件,而“>>”用于向目标文件附加或追加(append)内容。
还有“|”,称为管道符号(piping symbol),可将其视为各命令间传递信息的管道,用来将某个命令或程序的输出提供给另一个命令或程序。如果想分屏显示cat命令的结果,可以在命令末尾加上“|less”。这样结果即可分屏显示,分别以PageUp和PageDn键进行上下翻页,按“q”退出。

范例
1. cat -n textfile1 > textfile2
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
2. cat -b textfile1 textfile2 >> textfile3
把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里

特殊应用
利用cat命令,可以查看UB和linux内核的版本号。
UB版本号:cat /etc/issue
内核版本号:cat /etc/issue

心得
由于我的数据主要是win下xls导出的以制表符分隔的txt文件,处理的最终目的是纵向(指 列数不变,增加行数)合并文件,除去重复行并按某个顺序排序,所以cat命令对这一处理过程很有用。至于去除重复行甚至比较两文件差异,由uniq命令来完成。