Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)

Linux 上用來實現數據的圖形可視化的應用程序有很多,從簡單的 2-D 繪圖到 3-D 製圖,再到科學圖形編程和圖形模擬。幸運的是,這方面的工具有很多開放源碼實現,包括 gnuplot、GNU Octave、Scilab、MayaVi、Maxima 等。每個工具都有自己的優缺點,並且都是針對不同的應用程序而設計的。對這些開放源碼圖形可視化工具進行一下探索,有助於我們更好地決定哪個工具最適合我們的應用程序。


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


可視化工具的簡短列表




在本文中,將對很多流行的 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 函數圖
<code>set samples 25set isosamples 26set title "Test 3D gnuplot"set contour baseset hidden3d offset 1splot [-12:12.01] [-12:12.01] sin(sqrt(x**2+y**2))/sqrt(x**2+y**2)/<code>

清單 1 充分顯示了 gnuplot 的命令集是多麼簡單。採樣速度和繪圖密度是由 samples 和 isosamples 決定的,標題是由 title 參數為圖形提供的。同時還啟用了基本的等高線和隱線消除特性,最終的繪圖是利用splot命令使用數學庫內部的函數來創建的。結果如圖 1 所示。

圖 1. gnuplot 的一個簡單繪圖
Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)

除了創建函數圖之外,gnuplot 還可以很好地對文件中包含的圖形進行繪圖。考慮如清單 2 所示的 x/y 數據對(這個文件的一個簡短版本)。這個文件中給出的數據對錶示一個兩維空間中的 x 和 y 軸的數據。

清單 2. gnuplot 的示例數據文件(data.dat)
<code>88 9979 9876 8960 85...60 22/<code>

如果希望在兩維空間中繪製這些數據,並將每個數據點使用一條線連接起來,就可以使用清單 3 給出的 gnuplot 腳本。

清單 3. 對清單 2 中的數據進行繪圖所使用的 Gnuplot 腳本
<code>set title "Sample data plot"plot 'data.dat' using 1:2 t 'data points', \\  "data.dat" using 1:2 t "lines" with lines/<code>

結果如圖 2 所示。注意 gnuplot 自動給出了軸的刻度,但是如果需要標註圖形的位置,就可以對其進行控制。

圖 2. 在 gnuplot 中使用數據文件進行簡單的繪圖


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


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
<code>GNU Octave, version 2.1.50Copyright (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 orFITNESS 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.htmlReport bugs to <bug-octave>.>> 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>>/<bug-octave>/<code>

圖 3 給出的圖是清單 4 中 Octave 代碼的輸出結果。

圖 3. 使用 Octave 繪製的 Lorentz 圖


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


GNU Octave(與 gnuplot 一致)可以使用 multiplot 特性在一個頁面上呈現多個圖形。使用這個特性,就可以定義要創建多少圖形,然後使用subwindow 命令來定製特定的圖形。在定義好子窗口之後,就可以正常地生成自己的圖形,然後再跳到下一個子窗口中(如清單 5 所示)。

清單 5. 在 Octave 中生成多個圖形
<code>>> 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))/<code>

所生成的多圖頁面如圖 4 所示。這是將相關圖形蒐集在一起進行比較和對比的一種很好的特性。

圖 4. 使用 GNU Octave 繪製多圖


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


我們可以認為 Octave 是一種使用 gnuplot 作為後臺實現來進行可視化的高級語言。它提供了豐富的數學庫,是 Matlab 的一個很好的免費替換產品。可以很容易利用用戶開發的用來進行語音處理、優化、符號計算等的包對它進行擴展。Octave 在某些 GNU/Linux 的發行版中都有,例如 Debian,也可以在使用 Cygwin 的 Windows 和 Mac OS X 上使用。


Scilab




Scilab 在啟用數值計算和可視化方面都與 GNU Octave 非常類似。Scilab 是世界上廣泛存在的工程和科學應用程序所使用的一種解釋器和高級語言。

Scilab 誕生於 1994 年,它是由法國的https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&type=10&appmsgid=503170341&token=183721230&lang=zh_CN 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 進行交互


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


在這個例子中,先是創建了一個向量(t),其值的範圍從 0 到 2PI(步進大小為 0.2)。然後生成了一個 3-D 圖形(使用 z=f(x,y), 或者說是 xi,yi 點處的一個表面)。圖 6 給出了所生成的圖形。

圖 6. 圖 5 中的命令所生成的 Scilab 圖


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


Scilab 中包括很多庫和函數,它們可以使用最少的複雜性來繪製圖形。下面是一個生成簡單三維柱狀圖的例子:

-->hist3d(5*(rand(5,5));

首先,rand(5,5) 會構建一個 5,5 大小的矩陣,其中包含了一些隨機值(其最大值為 5)。這個矩陣被傳遞給函數 hist3d。所生成的柱狀圖如圖 7 所示。

圖 7. 生成隨機的三維柱狀圖


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


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 掃描圖)


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


MayaVi 是在 Python 腳本語言中擴展 VTK 的一個有趣例子。


Maxima




Maxima 是一個符號和數值計算程序,它是 Octave 和 Scilab 的血液。Maxima 最初的開發團隊開始於 19 世紀 70 年代的 MIT(麻聲理工學院),現在還繼續在維護。最初的版本(一個計算機代數系統)名為 DOE Macsyma,它開闢了後來開發的更知名的應用程序(例如 Mathematica)的道路。

Maxima 提供了一組所期望的功能集(例如微積分、解析線性系統和非線性等式集)以及符號計算能力。在 Maxima 中還可以找到 Lisp 的一些線索(從引用之類的函數、map 和 apply 中)。Maxima 是使用 Lisp 編寫的,可以在 Maxima 會話中執行 Lisp 代碼。

Maxima 具有很好的在線幫助系統,它是基於超文本的。例如,如果希望瞭解某個特定的 Maxima 函數是如何工作的,那麼就可以簡單地輸入example(desolve),然後它會提供很多樣例用法。

Maxima 還有一些有趣的特性,例如規則和模式。這些規則和模式都是由用來簡化表達式的程序所使用的。規則可以用於交換和非交換代數。

Maxima 與 Octave 和 Scilab 非常類似:其中解釋器都可以用來與用戶進行交互,結果都會直接在同一個窗口中提供,或者也可以在另外一個窗口中進行顯示。在圖 9 中,請求繪製一個簡單的 3-D 圖形。

圖 9. 與 Maxima 進行交互


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


所生成的圖形如圖 10 所示。

圖 10. 圖 9 的命令所生成的 Maxima 圖形


Linux 上的 5 大數據可視化工具你會用嗎?(附大數據linux教程)


展望




在本文中介紹了幾個開放源碼 GNU/Linux 可視化工具。其他有用的工具還包括 Gri、PGPLOT、SciGraphica、plotutils、NCAR Graphics 和 ImLib3D。這些都是開放源碼的,也就是說您可以看到它們是如何工作的;如果願意,也可以對它們進行修改。另外,如果您正在尋找一個很好的圖形仿真環境,那就請查看一下與 OpenGL 一起使用的 Open Dynamics Engine(ODE)。

具體的需要決定了哪種工具最適合使用。如果希望使用一個具有很多可視化算法的強大的可視化系統,那麼 MayaVi 就是所要尋找的工具。對於具有可視化功能的數值計算來說,GNU Octave 和 Scilab 都非常適合。如果需要符號計算能力,那麼 Maxima 就是一個非常好的選擇。最後(但並非不重要),如果所需要的只是一些基本的繪圖功能,那麼 gnuplot 就可以很好地滿足這一需求。

最後說一下,想要學習大數據的限時領取免費資料及課程

領取方法:

還是那個萬年不變的老規矩

1.評論文章,沒字數限制,一個字都行!

3.私信小編:“大數據開發教程”即可!

謝謝大家,祝大家學習愉快!(拿到教程後一定要好好學習,多練習哦!)


分享到:


相關文章: