2013年9月7日 星期六

使用 Chart 和 Chart-cairo 繪製統計圖

很多時候我們會想要用圖來呈現我們的資料,畢竟我們對數字的敏銳度不是很高。提到統計繪圖,大部分人會想到 gnuplot 或是 R。對於程式設計人員來說,這代表他們必須寫程式來產生讓 R 或是 gnuplot 繪圖的程式碼,然後再利用作業系統的程式呼叫方法(fork + exec* , CreateProcess)來執行這段程式碼。這樣做不只麻煩(呼叫並管理子程式在某些書甚至會佔去一整章),而且還會犧牲掉不少效能。

Haskell 跟許多程式語言一樣,有人替它寫了圖表繪製程式庫(chart library) Chart。在它的 wiki 裡面可以看到幾個簡單的例子,而且畫出來的圖也挺好看的,更支援 svg, png 等格式的輸出(藉著 cairo 或 diagrams),簡直意圖誘惑人使用。

那些例子裡面沒有說明的部份,包括了中文字使用,字型調整這兩項。所以,我以這兩個項目為主軸,隨便弄了簡單的資料,畫出了相當精簡的圖。主要的程式碼請參考這裡

圖會出來會變成

(我應該放點心思在配色上的..應該是,請看在我肝臟的份上原諒我吧Orz)

使用中文字的關鍵在於設定正確的字型。如果設定的字型沒有中文字,則在應該是中文字的地方會出現方塊圖樣,暗示在該字型中找不到中文字。

Chart 程式庫最特別的地方在於它利用了 lens (不妨 google "Control.Lens" 來找相關的資料) 來讓設定圖表變得(相對的)比較容易。只是對於 lens 我還是第一次使用,所以程式碼裡面難免會有些不漂亮的寫法。如果有幸某大師瞧見了拙作,歡迎不吝指教!

沒有留言:

張貼留言