Linux 上的数据可视化工具.docx
《Linux 上的数据可视化工具.docx》由会员分享,可在线阅读,更多相关《Linux 上的数据可视化工具.docx(14页珍藏版)》请在冰豆网上搜索。
![Linux 上的数据可视化工具.docx](https://file1.bdocx.com/fileroot1/2023-1/27/39965a62-2bb9-4633-a092-3f1233563ce8/39965a62-2bb9-4633-a092-3f1233563ce81.gif)
Linux上的数据可视化工具
Linux上的数据可视化工具
时间:
2006-11-2912:
07:
37 来源:
Linux联盟收集 作者:
Linux®上用来实现数据的图形可视化的应用程序有很多,从简单的2-D绘图到3-D制图,再到科学图形编程和图形模拟。
幸运的是,这方面的工具有很多开放源码实现,包括gnuplot、GNUOctave、Scilab、MayaVi、Maxima等。
每个工具都有自己的优缺点,并且都是针对不同的应用程序而设计的。
对这些开放源码图形可视化工具进行一下探索,有助于我们更好地决定哪个工具最适合我们的应用程序。
可视化工具的简短列表
在本文中,将对很多流行的Linux数据可视化工具进行一下调查,并对其中一些工具进行更深入的探讨。
例如,某个工具是否为进行数值计算而提供了一种语言?
这个工具是交互式的还是提供了一种批处理模式来单独进行操作?
可以使用这个工具进行图像或数字信号处理吗?
这个工具是否提供了语言绑定来支持与用户应用程序的集成(例如Python、Tcl、Java编程语言等)?
另外还将展示一些工具的图形化处理能力。
最后,将分析每个工具的长处,从而帮助我们确定哪个工具最适合完成计算任务或数据可视化。
在本文中所探索的开放源码工具包括(同时还给出了每个工具所使用的许可证):
∙Gnuplot(GPL)
∙GNUOctave(GPL)
∙Scilab(Scilab)
∙MayaVi(BSD)
∙Maxima(GPL)
Gnuplot
Gnuplot是一个非常好的可视化工具,它从1986年开始就存在了。
如果没有gnuplot的图,就很难阅读论文。
尽管gnuplot是命令行驱动的,但是它也在不断发展,现在也可以支持很多非交互式的应用程序了,例如它可以作为一个GNUOctave的绘图引擎使用。
gnuplot具有很好的可移植性,可以在UNIX®、Microsoft®Windows®、MacOS®X和很多其他平台上运行。
它可以支持从postscript到新近的PNG等极为广泛的输出格式。
gnuplot可以以批处理模式进行操作,提供了一个命令脚本来生成一个图形,也是以非交互式模式来运行的,这让我们可以尝试一下它的特性来了解它们绘图的效果。
在gnuplot中有一个对应于UNIX的数学库的标准的数学库可以使用。
函数的参数支持整型、实型和复型。
可以将数学库配置成弧度或角度(默认为弧度)。
为了进行绘图,gnuplot可以使用plot命令生成2-D图形,或使用splot命令生成3-D图形(作为2-Dprojection)。
使用plot命令,gnuplot可以在直角二维坐标系中进行操作。
splot命令默认使用的是笛卡儿坐标系,不过也可以支持球面或柱面坐标系。
也可以在图形中绘制等高线(如下面的图1所示)。
有一种新风格的绘图pm3d可以支持绘制使用调色板进行映射的3-D和4D数据作为地图或地表图来使用。
下面是一个简单的gnuplot例子,它给出了一个具有等高线和隐线消除的3-D图形。
清单1给出了所使用的gnuplot命令,图1给出了所生成的图形结果。
清单1.简单的gnuplot函数图
setsamples25
setisosamples26
settitle"Test3Dgnuplot"
setcontourbase
sethidden3doffset1
splot[-12:
12.01][-12:
12.01]sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)
清单1充分显示了gnuplot的命令集是多么简单。
采样速度和绘图密度是由samples和isosamples决定的,标题是由title参数为图形提供的。
同时还启用了基本的等高线和隐线消除特性,最终的绘图是利用splot命令使用数学库内部的函数来创建的。
结果如图1所示。
图1.gnuplot的一个简单绘图
除了创建函数图之外,gnuplot还可以很好地对文件中包含的图形进行绘图。
考虑如清单2所示的x/y数据对(这个文件的一个简短版本)。
这个文件中给出的数据对表示一个两维空间中的x和y轴的数据。
清单2.gnuplot的示例数据文件(data.dat)
8899
7998
7689
6085
...
6022
如果希望在两维空间中绘制这些数据,并将每个数据点使用一条线连接起来,就可以使用清单3给出的gnuplot脚本。
清单3.对清单2中的数据进行绘图所使用的Gnuplot脚本
settitle"Sampledataplot"
plot'data.dat'using1:
2t'datapoints',\
"data.dat"using1:
2t"lines"withlines
结果如图2所示。
注意gnuplot自动给出了轴的刻度,但是如果需要标注图形的位置,就可以对其进行控制。
图2.在gnuplot中使用数据文件进行简单的绘图
Gnuplot是一个很好的可视化工具,它非常出名,是很多GNU/Linux发行版的一部分。
然而,如果希望进行基本的数据可视化和数值计算,那么GNUOctave可能是我们希望寻找的工具。
GNUOctave
GNUOctave是一种高级语言,主要设计用来进行数值计算,它是MathWorks出品的Matlab商业软件的一个强有力的竞争产品。
除了gnuplot所提供的简单命令集之外,Octave还为进行数学编程提供了一种丰富的语言。
我们甚至可以使用C或C++语言编写自己的应用程序,然后与Octave进行交互。
Octave最初是在1992年作为化学反应堆设计教科书的一个辅助软件而编写的。
其作者希望能够帮助学生解决反应堆的设计问题,而不用调试Fortran程序。
结果获得了一种非常有用的语言,并为解决数值问题提供了交互式环境。
Octave可以以一种脚本化模式非交互地进行操作,或者通过C和C++语言绑定进行操作。
Octave本身就有一种非常丰富的语言,该语言看起来与C语言非常类似,并有一个很大的数学库,包括信号和图像处理、音频处理以及控制理论所使用的一些特殊函数。
由于Octave使用了gnuplot作为其后端实现,因此使用gnuplot可以绘制的所有东西都可以使用Octave进行绘制。
Octave的确有一种更丰富的语言来进行计算,它有很多明显的优点,但是仍然有gnuplot的一些限制。
在下面这个Octave-ForgeWeb站点上提供的例子中(SimpleExamples),绘制了一个LorentzStrangeAttractor。
清单4给出了在使用Cygwin的Windows平台上Octave所使用的交互式对话框。
这个例子展示了lsode的用法,这是一个常见的微分方程解算器。
清单4.使用Octave呈现LorentzStrangeAttractor
GNUOctave,version2.1.50
Copyright(C)1996,1997,1998,1999,2000,2001,2002,
2003JohnW.Eaton.
Thisisfreesoftware;seethesourcecodeforcopyingconditions.
ThereisABSOLUTELYNOWARRANTY;notevenforMERCHANTIBILITYor
FITNESSFORAPARTICULARPURPOSE.Fordetails,type`warranty'.
Pleasecontributeifyoufindthissoftwareuseful.
Formoreinformation,visithttp:
//www.octave.org/help-wanted.html
Reportbugsto.
>>functiony=lorenz(x,t)
y=[10*(x
(2)-x
(1));
x
(1)*(28-x(3));
x
(1)*x
(2)-8/3*x(3)];
endfunction
>>x=lsode("lorenz",[3;15;1],(0:
0.01:
25)');
>>gsetparametric
>>gsplotx
>>
图3给出的图是清单4中Octave代码的输出结果。
图3.使用Octave绘制的Lorentz图
GNUOctave(与gnuplot一致)可以使用multiplot特性在一个页面上呈现多个图形。
使用这个特性,就可以定义要创建多少图形,然后使用subwindow命令来定制特定的图形。
在定义好子窗口之后,就可以正常地生成自己的图形,然后再跳到下一个子窗口中(如清单5所示)。
清单5.在Octave中生成多个图形
>>multiplot(2,2)
>>subwindow(1,1)
>>t=0:
0.1:
6.0
>>plot(t,cos(t))
>>subwindow(1,2)
>>plot(t,sin(t))
>>subwindow(2,1)
>>plot(t,tan(t))
>>subwindow(2,2)
>>plot(t,tanh(t))
所生成的多图页面如图4所示。
这是将相关图形搜集在一起进行比较和对比的一种很好的特性。
图4.使用GNUOctave绘制多图
我们可以认为Octave是一种使用gnuplot作为后台实现来进行可视化的高级语言。
它提供了丰富的数学库,是Matlab的一个很好的免费替换产品。
可以很容易利用用户开发的用来进行语音处理、优化、符号计算等的包对它进行扩展。
Octave在某些GNU/Linux的发行版中都有,例如Debian,也可以在使用Cygwin的Windows和MacOSX上使用。
有关Octave的更多信息请参阅参考资料一节的内容。
Scilab
Scilab在启用数值计算和可视化方面都与GNUOctave非常类似。
Scilab是世界上广泛存在的工程和科学应用程序所使用的一种解释器和高级语言。
Scilab诞生于1994年,它是由法国的INRIA(Institutnationalderechercheeninformatiqueetenautomatique)和ENPC(ÉcoleNationaledesPontsetChaussées)设计的。
从2003年开始Scilab开始由ScilabConsortium进行维护。
Scilab包括一个很大的数学函数库,可以利用使用C和Fortran之类的高级语言编写的程序进行扩充。
它还有重载数据类型和操作的能力。
它包括一个集成的高级语言,不过这种语言与C语言稍微有些区别。
Scilab中有很多工具包提供了2-D和3-D的图形动画、优化、统计、图标和网络、信号处理、混合动态系统模拟和仿真以及其他许多由社区所贡献的功能。
在大部分UNIX系统上都可以使用Scilab,在较新的Windows操作系统上也可以使用。
与GNUOctave一样,Scilab也有很好的文档。
由于它是一个欧洲的项目,因此还可以找到很多使用除英语之外的其他语言所编写的文档和文章。
在启动Scilab之后,就会显示一个窗口让我们可以与之进行交互(如图5所示)。
图5.与Scilab进行交互
在这个例子中,先是创建了一个向量(t),其值的范围从0到2PI(步进大小为0.2)。
然后生成了一个3-D图形(使用z=f(x,y),或者说是xi,yi点处的一个表面)。
图6给出了所生成的图形。
图6.图5中的命令所生成的Scilab图
Scilab中包括很多库和函数,它们可以使用最少的复杂性来绘制图形。
下面是一个生成简单三维柱状图的例子:
-->hist3d(5*(rand(5,5));
首先,rand(5,5)会构建一个5,5大小的矩阵,其中包含了一些随机值(其最大值为5)。
这个矩阵被传递给函数hist3d。
所生成的柱状图如图7所示。
图7.生成随机的三维柱状图
Scilab和Octave非常类似。
它们都具有很大的社区参与基础。
Scilab是使用Fortran77编写的,而Octave则是使用C++编写的。
Octave使用gnuplot来实现可视化;Scilab则提供了自己的库。
如果非常熟悉Matlab,那么Octave就是一个很好的选择,因为它努力实现了与Matlab的兼容性。
Scilab包括了很多数学函数,因此非常适合进行信号处理。
如果仍然不确定要使用哪个工具,可以全部尝试一下。
它们都是很好的工具,可以使用它们来完成不同的任务。
MayaVi
MayaVi在梵语中的意思是魔术师,它是一种数据可视化工具,绑定了具有强大可视化工具包(VTK)的Python来进行图形化显示。
MayaVi还提供了一个使用Tkinter模块开发的图形用户界面(GUI)。
Tkinter是一个Tk界面,通常都与Tcl一起使用。
MayaVi最初是为ComputationalFluidDynamics(CFD)作为一个可视化工具而开发的。
当人们认识到它在其他领域中的效用之后,它就作为一种通用科学数据可视化工具重新进行了设计。
MayaVi背后的魔力来自于VTK。
VTK是一个用来进行数据可视化和图像处理的开放源码系统,它在科学社区中被广泛地使用。
VTK通过为Tcl/Tk、Java编程语言以及Python加上C++库所提供的脚本化接口而封装了很多功能。
VTK在很多操作系统上都是可移植的,包括UNIX、Windows和MACOSX。
围绕VTK的MayaVi外壳可以作为一个Python模块从其他Python程序中导入,并通过Python解释器来编写脚本。
MayaVi所提供的tkinterGUI允许进行过滤器的配置和应用,以及在可视化基础上渲染一些灯光效果。
图8是在Windows平台上使用MayaVi进行可视化的一个例子。
图8.使用MayaVi/VTK显示的3-D可视化(心脏CT扫描图)
MayaVi是在Python脚本语言中扩展VTK的一个有趣例子。
Maxima
Maxima是一个符号和数值计算程序,它是Octave和Scilab的血液。
Maxima最初的开发团队开始于19世纪70年代的MIT(麻声理工学院),现在还继续在维护。
最初的版本(一个计算机代数系统)名为DOEMacsyma,它开辟了后来开发的更知名的应用程序(例如Mathematica)的道路。
Maxima提供了一组所期望的功能集(例如微积分、解析线性系统和非线性等式集)以及符号计算能力。
在Maxima中还可以找到Lisp的一些线索(从引用之类的函数、map和apply中)。
Maxima是使用Lisp编写的,可以在Maxima会话中执行Lisp代码。
Maxima具有很好的在线帮助系统,它是基于超文本的。
例如,如果希望了解某个特定的Maxima函数是如何工作的,那么就可以简单地输入example(desolve),然后它会提供很多样例用法。
Maxima还有一些有趣的特性,例如规则和模式。
这些规则和模式都是由用来简化表达式的程序所使用的。
规则可以用于交换和非交换代数。
Maxima与Octave和Scilab非常类似:
其中解释器都可以用来与用户进行交互,结果都会直接在同一个窗口中提供,或者也可以在另外一个窗口中进行显示。
在图9中,请求绘制一个简单的3-D图形。
图9.与Maxima进行交互
所生成的图形如图10所示。
图10.图9的命令所生成的Maxima图形
展望
在本文中介绍了几个开放源码GNU/Linux可视化工具。
其他有用的工具还包括Gri、PGPLOT、SciGraphica、plotutils、NCARGraphics和ImLib3D。
这些都是开放源码的,也就是说您可以看到它们是如何工作的;如果愿意,也可以对它们进行修改。
另外,如果您正在寻找一个很好的图形仿真环境,那就请查看一下与OpenGL一起使用的OpenDynamicsEngine(ODE)。
具体的需要决定了哪种工具最适合使用。
如果希望使用一个具有很多可视化算法的强大的可视化系统,那么MayaVi就是所要寻找的工具。
对于具有可视化功能的数值计算来说,GNUOctave和Scilab都非常适合。
如果需要符号计算能力,那么Maxima就是一个非常好的选择。
最后(但并非不重要),如果所需要的只是一些基本的绘图功能,那么gnuplot就可以很好地满足这一需求。
原文链接: