Linux 上的数据可视化工具

5 种开放源码图形化工具简介

Linux® 上用来实现数据的图形可视化的应用程序有很多,从简单的 2-D 绘图到 3-D 制图,再到科学图形编程和图形模拟。幸运的是,这方面的工具有很多开放源码实现,包括 gnuplot、GNU Octave、Scilab、MayaVi、Maxima 等。每个工具都有自己的优缺点,并且都是针对不同的应用程序而设计的。对这些开放源码图形可视化工具进行一下探索,有助于我们更好地决定哪个工具最适合我 们的应用程序。

0 评论:

M. Tim Jones (mtj@mtjones.com), 资深软件工程师, Emulex

2006 年 11 月 27 日

  • 内容

在 IBM Bluemix 云平台上开发并部署您的下一个应用。

开始您的试用

可视化工具的简短列表

在本文中,将对很多流行的 Linux 数据可视化工具进行一下调查,并对其中一些工具进行更深入的探讨。例如,某个工具是否为进行数值计算而提供了一种语言?这个工具是交互式的还是提供了一种 批处理模式来单独进行操作?可以使用这个工具进行图像或数字信号处理吗?这个工具是否提供了语言绑定来支持与用户应用程序的集成(例如 Python、Tcl、Java 编程语言等)?另外还将展示一些工具的图形化处理能力。最后,将分析每个工具的长处,从而帮助我们确定哪个工具最适合完成计算任务或数据可视化。

在本文中所探索的开放源码工具包括(同时还给出了每个工具所使用的许可证):

  • Gnuplot(GPL)
  • GNU Octave(GPL)
  • Scilab(Scilab)
  • MayaVi(BSD)
  • Maxima(GPL)

Gnuplot

Gnuplot 是一个非常好的可视化工具,它从 1986 年开始就存在了。如果没有 gnuplot 的图,就很难阅读论文。尽管 gnuplot 是命令行驱动的,但是它也在不断发展,现在也可以支持很多非交互式的应用程序了,例如它可以作为一个 GNU Octave 的绘图引擎使用。

gnuplot 具有很好的可移植性,可以在 UNIX®、Microsoft® Windows®、 Mac OS® X 和很多其他平台上运行。它可以支持从 postscript 到新近的 PNG 等极为广泛的输出格式。

gnuplot 可以以批处理模式进行操作,提供了一个命令脚本来生成一个图形,也是以非交互式模式来运行的,这让我们可以尝试一下它的特性来了解它们绘图的效果。

在 gnuplot 中有一个对应于 UNIX 的数学库的标准的数学库可以使用。函数的参数支持整型、实型和复型。可以将数学库配置成弧度或角度(默认为弧度)。

为了进行绘图,gnuplot 可以使用 plot 命令生成 2-D 图形,或使用 splot 命令生成 3-D 图形(作为 2-D projection)。使用 plot 命令,gnuplot 可以在直角二维坐标系中进行操作。splot 命令默认使用的是笛卡儿坐标系,不过也可以支持球面或柱面坐标系。也可以在图形中绘制等高线(如下面的图 1 所示)。有一种新风格的绘图 pm3d 可以支持绘制使用调色板进行映射的 3-D 和 4D 数据作为地图或地表图来使用。

下面是一个简单的 gnuplot 例子,它给出了一个具有等高线和隐线消除的 3-D 图形。清单 1 给出了所使用的 gnuplot 命令,图 1 给出了所生成的图形结果。

清单 1. 简单的 gnuplot 函数图
set samples 25
set isosamples 26
set title "Test 3D gnuplot"
set contour base
set hidden3d offset 1
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)
88 99
79 98
76 89
60 85
...
60 22

如果希望在两维空间中绘制这些数据,并将每个数据点使用一条线连接起来,就可以使用清单 3 给出的 gnuplot 脚本。

清单 3. 对清单 2 中的数据进行绘图所使用的 Gnuplot 脚本
set title "Sample data plot"
plot 'data.dat' using 1:2 t 'data points', \
  "data.dat" using 1:2 t "lines" with lines

结果如图 2 所示。注意 gnuplot 自动给出了轴的刻度,但是如果需要标注图形的位置,就可以对其进行控制。

图 2. 在 gnuplot 中使用数据文件进行简单的绘图

Gnuplot 是一个很好的可视化工具,它非常出名,是很多 GNU/Linux 发行版的一部分。然而,如果希望进行基本的数据可视化和数值计算,那么 GNU Octave 可能是我们希望寻找的工具。

回页首

GNU Octave

GNU Octave 是一种高级语言,主要设计用来进行数值计算,它是 MathWorks 出品的 Matlab 商业软件的一个强有力的竞争产品。除了 gnuplot 所提供的简单命令集之外,Octave 还为进行数学编程提供了一种丰富的语言。我们甚至可以使用 C 或 C++ 语言编写自己的应用程序,然后与 Octave 进行交互。

Octave 最初是在 1992 年作为化学反应堆设计教科书的一个辅助软件而编写的。其作者希望能够帮助学生解决反应堆的设计问题,而不用调试 Fortran 程序。结果获得了一种非常有用的语言,并为解决数值问题提供了交互式环境。

Octave 可以以一种脚本化模式非交互地进行操作,或者通过 C 和 C++ 语言绑定进行操作。Octave 本身就有一种非常丰富的语言,该语言看起来与 C 语言非常类似,并有一个很大的数学库,包括信号和图像处理、音频处理以及控制理论所使用的一些特殊函数。

由于 Octave 使用了 gnuplot 作为其后端实现,因此使用 gnuplot 可以绘制的所有东西都可以使用 Octave 进行绘制。Octave 的确有一种更丰富的语言来进行计算,它有很多明显的优点,但是仍然有 gnuplot 的一些限制。

在下面这个 Octave-Forge Web 站点上提供的例子中(SimpleExamples),绘制了一个 Lorentz Strange Attractor。清单 4 给出了在使用 Cygwin 的 Windows 平台上 Octave 所使用的交互式对话框。这个例子展示了 lsode 的用法,这是一个常见的微分方程解算器。

清单 4. 使用 Octave 呈现 Lorentz Strange Attractor
GNU Octave, version 2.1.50
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 John W. Eaton.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html

Report bugs to <bug-octave&bevo.che.wisc.edu>.

>> function y = 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)');
>> gset parametric
>> gsplot x
>>

图 3 给出的图是清单 4 中 Octave 代码的输出结果。

图 3. 使用 Octave 绘制的 Lorentz 图

GNU Octave(与 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. 使用 GNU Octave 绘制多图

我 们可以认为 Octave 是一种使用 gnuplot 作为后台实现来进行可视化的高级语言。它提供了丰富的数学库,是 Matlab 的一个很好的免费替换产品。可以很容易利用用户开发的用来进行语音处理、优化、符号计算等的包对它进行扩展。Octave 在某些 GNU/Linux 的发行版中都有,例如 Debian,也可以在使用 Cygwin 的 Windows 和 Mac OS X 上使用。有关 Octave 的更多信息请参阅 参考资料 一节的内容。

回页首

Scilab

Scilab 在启用数值计算和可视化方面都与 GNU Octave 非常类似。 Scilab 是世界上广泛存在的工程和科学应用程序所使用的一种解释器和高级语言。

Scilab 诞生于 1994 年,它是由法国的 INRIA(Institut national de recherche en informatique et en automatique)和 ENPC(École Nationale des Ponts et Chaussées)设计的。从 2003 年开始 Scilab 开始由 Scilab Consortium 进行维护。

Scilab 包括一个很大的数学函数库,可以利用使用 C 和 Fortran 之类的高级语言编写的程序进行扩充。它还有重载数据类型和操作的能力。它包括一个集成的高级语言,不过这种语言与 C 语言稍微有些区别。

Scilab 中有很多工具包提供了 2-D 和 3-D 的图形动画、优化、统计、图标和网络、信号处理、混合动态系统模拟和仿真以及其他许多由社区所贡献的功能。

在大部分 UNIX 系统上都可以使用 Scilab,在较新的 Windows 操作系统上也可以使用。与 GNU Octave 一样, 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 是使用 Fortran 77 编写的,而 Octave 则是使用 C++ 编写的。Octave 使用 gnuplot 来实现可视化;Scilab 则提供了自己的库。如果非常熟悉 Matlab,那么 Octave 就是一个很好的选择,因为它努力实现了与 Matlab 的兼容性。Scilab 包括了很多数学函数,因此非常适合进行信号处理。如果仍然不确定要使用哪个工具,可以全部尝试一下。它们都是很好的工具,可以使用它们来完成不同的任务。

回页首

MayaVi

MayaVi 在梵语中的意思是魔术师,它是一种数据可视化工具,绑定了具有强大可视化工具包(VTK)的 Python 来进行图形化显示。MayaVi 还提供了一个使用 Tkinter 模块开发的图形用户界面(GUI)。Tkinter 是一个 Tk 界面,通常都与 Tcl 一起使用。

MayaVi 最初是为 Computational Fluid Dynamics(CFD)作为一个可视化工具而开发的。当人们认识到它在其他领域中的效用之后,它就作为一种通用科学数据可视化工具重新进行了设计。

MayaVi 背后的魔力来自于 VTK。VTK 是一个用来进行数据可视化和图像处理的开放源码系统,它在科学社区中被广泛地使用。VTK 通过为 Tcl/Tk、Java 编程语言以及 Python 加上 C++ 库所提供的脚本化接口而封装了很多功能。VTK 在很多操作系统上都是可移植的,包括 UNIX、Windows 和 MAC OS X。

围绕 VTK 的 MayaVi 外壳可以作为一个 Python 模块从其他 Python 程序中导入,并通过 Python 解释器来编写脚本。MayaVi 所提供的 tkinter GUI 允许进行过滤器的配置和应用,以及在可视化基础上渲染一些灯光效果。

图 8 是在 Windows 平台上使用 MayaVi 进行可视化的一个例子。

图 8. 使用 MayaVi/VTK 显示的 3-D 可视化(心脏 CT 扫描图)

MayaVi 是在 Python 脚本语言中扩展 VTK 的一个有趣例子。

回页首

Maxima

Maxima 是一个符号和数值计算程序,它是 Octave 和 Scilab 的血液。Maxima 最初的开发团队开始于 19 世纪 70 年代的 MIT(麻声理工学院),现在还继续在维护。最初的版本(一个计算机代数系统)名为 DOE Macsyma,它开辟了后来开发的更知名的应用程序(例如 Mathematica)的道路。

Maxima 提供了一组所期望的功能集(例如微积分、解析线性系统和非线性等式集)以及符号计算能力。在 Maxima 中还可以找到 Lisp 的一些线索(从引用之类的函数、mapapply 中)。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、NCAR Graphics 和 ImLib3D。这些都是开放源码的,也就是说您可以看到它们是如何工作的;如果愿意,也可以对它们进行修改。另外,如果您正在寻找一个很好的图形仿真环 境,那就请查看一下与 OpenGL 一起使用的 Open Dynamics Engine(ODE)。

具体的需要决定了哪种工具最适合 使用。如果希望使用一个具有很多可视化算法的强大的可视化系统,那么 MayaVi 就是所要寻找的工具。对于具有可视化功能的数值计算来说,GNU Octave 和 Scilab 都非常适合。如果需要符号计算能力,那么 Maxima 就是一个非常好的选择。最后(但并非不重要),如果所需要的只是一些基本的绘图功能,那么 gnuplot 就可以很好地满足这一需求。

Linux 上的数据可视化工具的更多相关文章

  1. CentOS6安装各种大数据软件 第九章:Hue大数据可视化工具安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  2. linux下的数据备份工具rsync讲解

    linux下的数据备份工具 rsync(remote sync 远程同步)   名词解释: sync(Synchronize,即“同步”)为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的 ...

  3. ROS数据可视化工具Rviz和三维物理引擎机器人仿真工具V-rep Morse Gazebo Webots USARSimRos等概述

    ROS数据可视化工具Rviz和三维物理引擎机器人仿真工具V-rep Morse Gazebo Webots USARSimRos等概述 Rviz Rviz是ROS数据可视化工具,可以将类似字符串文本等 ...

  4. 利用wireshark抓取远程linux上的数据包

    原文发表在我的博客主页,转载请注明出处. 前言 因为出差,前后准备总结了一周多,所以博客有所搁置.出差真是累人的活计,不过确实可以学习到很多东西,跟着老板学习做人,学习交流的技巧.入正题~ wires ...

  5. 教你如何选择BI数据可视化工具

    本文来自网易云社区. 关于如何选择BI数据可视化工具,总体而言,主流BI产品在选择的时候要除了需要考虑从数据到展现.从公司内到公司外等各种场景,结合前面朋友的回答,还需要考虑以下几点:1:以后的数据处 ...

  6. linux 上部署 YApi 可视化接口管理平台

    linux 上部署 YApi 可视化接口管理平台: YApi 是一个高效.易用.功能强大的可视化接口管理平台,官方地址 : http://yapi.demo.qunar.com/ 环境要求 nodej ...

  7. xsos:一个在Linux上阅读SOSReport的工具

    xsos:一个在Linux上阅读SOSReport的工具 时间 2019-05-23 14:36:29  51CTO 原文  http://os.51cto.com/art/201905/596889 ...

  8. BI数据可视化工具怎么选?用这款就够了!

    任何一项产品的选择都需要谨慎而全面,BI数据可视化工具的选择就更不用说了.作为企业的IT部门,如果没有良好的BI工具支持,IT部门将会十分容易陷入困境.那么面对多元化的BI工具市场,IT部门该如何选择 ...

  9. 目前数据可视化工具排名如何?好用的BI可视化软件

    数据可视化用专业术语来就是通过视觉的方式向人类展示数据,这种在文本基础上的图表即简单又实用,而且相关性.趋势分析都非常明确,也非常可靠,通过图表一目了然.用通俗的话说就是画一张图表,将数据以比例的方式 ...

随机推荐

  1. javascript调试

    今天,发现了一个之前从未注意的角落,相信能够大大提高自己写JS的速度.能够迅速发现错误. 例如,今天的加班中调试一个js错误发现的一个例子. 1.Google浏览器报的错 以上是google浏览器报的 ...

  2. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

  3. WIN7_64位系统安装oracle以及PLSQL方法(不用装32位oracle客户端)

    一.oracle10g安装,比较简单 1.去Oracle网站下载Vista版的Oracle:Oracle Database 10g Release 2 (10.2.0.4) for Microsoft ...

  4. 清除NT Kernel & System占用80端口

    运行'netstat -ano'发现80端口被system占用,进程号'4'转到任务管理器上看pid对应的进程描述是NT kernel & system. 解决方法: 1.1运行'regedi ...

  5. HTML5 Canvas Arc Tutorial

    HTML5 Canvas Arc Tutorial HTML5 Canvas Arc Tutorial  

  6. 谷歌Cartographer学习(1)-快速安装测试(转载)

    转载自谷歌Cartographer学习(1)-快速安装测试 代码放到个人github上,https://github.com/hitcm/ 如下,需要安装3个软件包,ceres solver.cart ...

  7. IOS7 UITableView一行滑动删除后 被删除行的下一行的点击事件将被忽略解决办法

    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSI ...

  8. Back to Underworld(搜索)

    Back to Underworld Time Limit:4000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Su ...

  9. org.springframework.web.util.IntrospectorCleanupListener的用途

    Spring官方API中对其描述如下 /** * Listener that flushes the JDK's {@link java.beans.Introspector JavaBeans In ...

  10. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间

    1.问:知道程序执行时间我们能够做什么? 在<C++应用程序性能优化>一书中,假设大家读过相信大家一定对性能优化这一块很上心,文中总是对优化前后的时间对照很直观给我们一个感受. 那么我们怎 ...