Linux 上的資料視覺化工具

來源:互聯網
上載者:User

原文連結

視覺化檢視的簡短列表

在本文中,將對很多流行的 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 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)

 

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


圖 1. gnuplot 的一個簡單繪圖
 

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


清單 2. gnuplot 的樣本資料檔案(data.dat)

88 9979 9876 8960 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 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&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 最初的Team Dev開始於 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 進行互動
 

所產生的圖形 10 所示。


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

 

回頁首

展望

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

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

 

參考資料

學習

  • 您可以參閱本文在 developerWorks 全球網站上的 英文原文 。

  • Los Alamos 國家實驗室 not so Frequently Asked Questions 是使用 gnuplot 的很好資源,在這裡可以找到有關更加複雜的 gnuplot 問題的答案。 
  • 在 GNU Octave Repository 上瀏覽大量的 Octave 指令碼、函數以及擴充。您還可以找到有關為 octave-forge 添加擴充的提示。
  • 如果對統計更感興趣,請閱讀這個 3 篇系列文章 “使用 R 編寫統計程式” 的第 1 部分, “初涉大量統計工具”(developerWorks,2004 年 9 月),它簡要介紹了這個工具包的特性;第 2 部分 “函數式程式設計和資料探索”(developerWorks,2004 年 10 月),它介紹了看起來更接近 R 語言的功能;以及第 3 部分 “可重用和物件導向編程”(developerWorks,2006 年 1 月),它介紹了 R 語言的物件導向特性以及更多的 R 語言的通用編程概念。 
  • 尋找快速處理數組方法的 Python 程式員應該參考 “可愛的 Python: Numerical Python”(developerWorks,2003 年 10 月)。 
  • 在 developerWorks Linux 專區 中可以找到為 Linux 開發人員準備的更多資源。 
  • 隨時關注 developerWorks 技術事件和網路廣播。 

獲得產品和技術

    • gnuplot 首頁 是下載 gnuplot 軟體和尋找文檔的好地方。您還會發現一個示範圖庫,這可以協助您瞭解使用 gnuplot 能繪製哪些圖形,以及如何為您的應用程式裁減這些功能。 

    • GNU Octave 是一種用來進行數值計算的進階語言,它使用 gnuplot 作為自己的圖形引擎。它是商業 Matlab 軟體的一個很好的替代品。其網站上包括了有關下載和更多文檔訪問的資訊。 
    • 可以在 SourceForge.net 上下載 MayaVi Data Visualizer。在這裡還可以找到一些文檔,以及 MayaVi 為 VTK 所提供的特性列表。 
    • Visualization Toolkit (VTK) 是一個功能強大的開放源碼軟體,可以用來進行 3-D 電腦繪圖、影像處理和可視化操作。在這個網站上還可以找到軟體、文檔以及關於使用 VTK 的很多有用連結。 
    • Scilab 是一個用來進行數值計算和圖形可視化呈現的免費科學軟體包。在這個網站上,可以找到 Scilab 的最新版本以及文檔和其他使用者的資訊(例如如何為這個項目貢獻自己的力量)。 
    • Maxima 是 Maple 和 Mathematica 除開放源碼實現 Octave 和 Scilab 之外的另外一個替代品。它不但在數學計算能力方面具有很好的支援,而且在使用內嵌的 Lisp 語言進行編程來實現符號處理方面也非常傑出。 
    • NCAR Graphics 首頁 提供了一個穩定的 UNIX 包用來繪製輪廓圖、地圖、表面圖、氣象圖、x-y 圖以及很多其他圖形。 
    • Gri 是科學圖形程式使用的一種進階語言。可以使用它來構造 x-y 圖、輪廓圖以及可以通過圖形屬性進行精細控制的映像。 
    • SciGraphica 非常適合進行資料分析和技術圖形處理。 
    • ImLib3D 庫 是一個用來進行 3-D 影像處理的開放源碼軟體包,其主要目標是使處理盡量簡單。 
    • ODE 是一個開放源碼物理引擎,它可以很好地實現物理系統的建模功能。將它與 Open/GL 組合使用,就可以獲得進行圖形模擬的絕佳環境。 
    • 訂購免費的 SEK for Linux,這有兩張 DVD,包括最新的 IBM for Linux 的試用版軟體,包括 DB2、Lotus、Rational、Tivoli 和 WebSphere。 
    • 利用 IBM 試用軟體 構建您的下一個 Linux 開發項目,這些軟體可以從 developerWorks 上直接下載。 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.