RGL:R 的 OpenGL 套件

RGL 是一套 R 的套件,它可以讓使用者在 R 的環境下畫出高品質的 OpenGL 3D 圖形,更可以讓使用者透過滑鼠旋轉或放大圖形,即時的看到圖形的每個角度,用起來不輸 Matlab,對於有 3D 資料分析需求的使用者來說,相當方便!只是對一般使用者而言,想要使用他必須先熟悉 R 的語法,R 是一個開放原始碼的統計軟體,跟 S-plus 非常相似,但沒學過的人恐怕還是要花上一小段時間。

RGL 除了可以畫出 3D 的圖形外,也可以將資料以動畫的方式呈現,其實就是連續畫出每張影格,看起來就會有動畫的效果,使用者也可以將這個動畫以 GIF 檔的方式儲存下來,使用一般瀏覽器就可以看了。

使用 RGL 所畫出的動畫

以下示範如何使用 RGL 做出 3D 圖動畫,首先當然必須要先把 R 與 RGL 套件裝好。R 的安裝很簡單,直接上 R 的網站下載自動安裝檔裝起來就可以了,目前最新版是 2.8.0 版,懶得找的話就直接下載這個吧。裝完了 R 之後,再進入 R 的環境安裝 RGL。選擇「程式套件」->「安裝程式套件」。



首先選擇一個最近的的鏡像站,在台灣的人當然選擇「Taiwan」的最快。



接下來選擇要安裝的套件,這裡你可以看到所有 R 官方所提供的套件,數量非常的多,他是按照字母順序排的,找到我們要的「rgl」,按下確定之後,RGL 就會自動安裝了。




裝完了 R 與 RGL 之後,另一個要安裝的工具是 ImageMagick,他是在產生 GIF 動畫檔時要用的工具,若是你只要在 R 的環境中看動畫,不儲存成 GIF 檔的話,是可以不用安裝它的。安裝 Imagemagick 也很方便,直接上他的網站下在自動安裝檔安裝即可,懶得找就下載這個吧。在安裝完 ImageMagick 之後,R 必須關閉重新啟動,不然 R 會找不到剛裝進去的 ImageMagick!

所有的工具都裝了之後,接下來進入 R 的環境中開始畫圖,在 R 的環境中所有的操作都是透過指令。首先載入 RGL 套件。

library(rgl)
從內建的資料中選一筆要作為示範用的資料,這裡我們選擇 volcano 這筆資料,若是你對這筆資料有興趣,可以使用 help(volcano) 指令查詢。

data(volcano)
產生我們實際畫圖用的座標資料,這裡的 z 是一個矩陣,也就是實際上我們要畫的資料,而 x 與 y 是一維陣列,指定 z 中資料格點的位置,無法理解的話,等到圖畫出來之後,看圖應該比較快。

<- 2 * volcano # Exaggerate the relief
<- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
<- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

產生出顏色的對應表,也就是決定每個點的顏色。

zlim <- range(y)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights

資料都準備好之後,就可以畫圖了。aspect=c(1.5,1,0.6) 是指定 x、y、z 軸的比例。

persp3d(x, y, z, color = col, aspect = c(1.5, 1, 0.6))
圖畫出來之後,剩下的就是讓他動起來。這裡的 axis=c(0,0,1) 是讓圖形以 z 座標軸為軸旋轉,rpm=6 是轉速,duration=10 是動畫的時間。

play3d(spin3d(axis = c(0, 0, 1), rpm = 6), duration = 10)
而要把動畫存成 GIF 檔,也是使用類似的方式。movie="outputfile" 代表輸出的 GIF 檔案名稱,dir="C:\\outputdir" 是輸出的資料夾,把它換成你要存圖的資料夾路徑,記得路徑中的反斜線都要多打一個,不然 R 會把反斜線當跳脫字元。

movie3d(spin3d(axis = c(0, 0, 1), rpm = 6), duration = 10, movie = "outputfile", dir = "C:\\outputdir")
在把動畫存成 GIF 檔的時候,記得要把 RGL 繪圖的視窗放在不會被其他視窗遮住的位置,也就你要看得到你畫的 3D 圖在螢幕上轉,不然轉出來的 GIF 檔也會是被遮住的圖形。

RGL 除了在 Windows 上可以使用之外,在其他平台上(例如 Linux、Mac OS)也可以使用,使用的方法與指令也都相同。這些是在 Ubuntu Linux 上用 RGL 畫出來的圖形。

關於 R 更詳細的介紹,請參考 R 學習筆記

在 Linux 下的 RGL 示範在 Linux 下的 RGL 示範
在 Linux 下的 RGL 示範在 Linux 下的 RGL 示範
本站已經搬家了,欲查看最新的文章,請至 G. T. Wang 新網站

2 則留言:

  1. 最近剛好也在研究 RGL 怎麼玩,真的是受教了 XD

    回覆刪除
  2. 幫你補充一下,在 ubuntu 下面要裝 RGL 的 package ,必須要先裝 libxt-dev、libglu-dev,否則是編譯不過的。:p

    回覆刪除