5

gnuplot 初学小记

 3 years ago
source link: https://blog.csdn.net/yanxiangtianji/article/details/8159362
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
gnuplot 初学小记_yanxiangtianji的专栏-CSDN博客

总体上感觉:gnuplot是一个很轻量的开源科学绘图工具,而且用起来简洁利索,单从绘图的角度上说有了它一般的实验什么的都可以完全抛弃臃肿缓慢的matlab了。

另外它是一个跨平台的工具,windows和linux下都可以用。

画出来的图也挺漂亮的。

这两天做数据挖掘报告要画些图说明一下问题,我的工作机上又没有matlab,mathwork之类的工具(我嫌大嫌慢),又不好意思总去找别人,就研究了一下我自己的存货。发现以前用libsvm的时候依赖了一个叫gnuplot的工具貌似可以用。

说一下第一次用gnuplot执行plot命令的时候它要初始化很多东西,会比很慢,一度让我以为是死机了,要做好心理准备。

言归正传:

gnuplot的基本用法是命令式的,它有两个窗口,在一个标准的命令行窗口里面输入命令就像一个shell,它会在另一个窗口里面绘制出图形。另外它是支持脚本运行的,可以在shell里面调用。

它自己带有一个帮助文档,建议打开程序之后输入help打开一个参考手册,对照着用。

额外说一句,我这两天发现有一个小伙义务地把gnuplot的手册汉化了,而且在物欲横流的今天,居然在CSDN资源站上提供免积分下载,赞一个!

大家可以搜“gnuplot 4.6 中文手册”提供个现在(2012-11-8)最新的地址:http://download.csdn.net/detail/zdl_361/4684085

基本用法:

gnuplot有两个基本绘图命令,一切都靠它们:plot和splot。

基本用法是这样的:

plot sin(x)

splot sin(x)*cos(y)

plot负责画二维图形,默认以x作为自变量;splot负责画三维图形,默认以x和y作为自变量。顺便说一下gnuplot的三维图形旋转功能真是比matlab好用多了。

定义函数:

gnuplot自己提供了许多基本函数,另外我们还可以定义自己的函数,定义的方法是直接在一行上面写定义,需要用等号连接:

f(x,y)=sin(x)*cos(y);

splot f(x,y)

画多个图:

用逗号间隔,例如:

plot sin(x),x

就画了sin(x)和x两条线。

用replot(resplot)命令。

写完一个plot之后再写一个replot语句,后者不会替换掉前者,而是绘制在同一个图里。例如:

 plot s(x)

replot x*x

指定范围:

有时候需要指定各个坐标的范围,而用图形界面只能放大,不能缩小和平移(至少4.4版本是这样的),这就必须在命令中指定。

方法:中括号报告数据下限和上限,内部用冒号间隔。第一对中括号表示x轴的范围,第二对表示y轴的范围,第三对表示z轴的范围。

plot [-1:3][3:4] cosx(x)

splot [-pi:pi][-pi:pi] sin(x)*sin(y)

需要注意的是,这一次你定义了范围,下一次默认也还是这个范围,所以用的时候最好每个命令都带上范围。

with:

可以用with语句跟在主绘图语句后面,来选择效果,它支持连线、画点、画脉冲图、画曲面等等,可以在一个语句后面只加一个with看提示。

例如我要画一个脉冲效果的正弦图像:

plot sin(x) with impulses

我要画一个有渐变颜色效果的图:

splot sin(x)*sin(y) with pm3d

另外with是可以缩写的,例如with lines可以缩写成w l

using:

可以在绘图命令后面加using修饰,根据我的理解using的作用是选择数据的某些维度(也可以通过表达式将不同维度的变量进行计算生成新维度)。

这个东西放在文件那里介绍。

根据文件绘制:

这个功能比较复杂,我只了解一些简单的东西,总结如下:

使用单引号打开文件,文件中的数据一行是一个数据向量。

例如我有一个文件(D:\a.txt):

那么打开之后它gnuplot会认为它有4个三维的数据。

splot [0:5][0:5] 'D:\a.txt'  with lines

这里我还可以用using指定我要用选用部分维度的数据,例如我要用第一维做x坐标,分别以另外两维为纵坐标话两个折现统计图:

plot 'd:\a.txt' using 1:2 with lines

plot 'd:\a.txt' using 1:3 with lines

特殊文件:

gnuplot提供了2个特殊文件:'+' 和'++'。他们分别用来生成一维和二维的连续数据。在使用生成的数据时要用:$1和$2

f(x,y)=sin(x)*sin(y)

splot [-4:4][-4:4] '++' using 1:2:(f($1,$2)) with pm3d

注意因为'++'是一个文件,这里不能直接写函数,需要用using类完成函数的表示,不过要注意各个维度之间要用冒号分开,复杂的维度表达式要用括号括起来。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK