2017-09-21 32 views
3

我正在嘗試使用Haskell-Charts(http://hackage.haskell.org/package/Chart)生成一些圖表。它工作正常,我得到一個不錯的圖enter image description hereHaskell圖表的人類可讀數字

我唯一的「問題」是左邊的數字,這有點難以閱讀。有沒有一種方法可以提供一個函數,在顯示它們之前轉換這些數字? 我可以在繪製之前轉換數字,但我會失去精確度。我一直在看文檔,但如果它存在,我不會看到它。

謝謝

編輯:這是代碼。

import Graphics.Rendering.Chart.Easy 
import Graphics.Rendering.Chart.Axis.LocalTime 
import Graphics.Rendering.Chart.Backend.Diagrams 
import Data.Time.LocalTime 

main = do 
    -- Get datas 
    toFile def "test.svg" $ do 
    layout_title .= "Active mem" 
    plot (line "Active" $ [L.map (\v -> ((utcToLocalTime utc $ time v) :: LocalTime, (fromIntegral $ value v) :: Int)) $ V.toList q]) 

不幸的是,我從數據庫中獲取數據,我無法公開訪問它。但是大數字的[(LocalTime,Int)]列表應該給你類似的東西。我正在使用圖後端btw

+0

你能提供你的代碼,所以我們可以用它修補? – Cirquit

+0

我添加了我所能做的,但缺少數據。你可以使用[[(某些LocalTime,「2000000000」),(某些LocalTime + 10s,「2000005000」)]]或其他類似的東西,並得到類似的結果。 – Ulrar

+0

我相信這是可以做到的。但是 - 沒有令人失望的是 - 我總是發現'chart'對於簡單地繪製一些沒有像格式不好的數字這樣的問題的圖表來說有點笨拙。我想宣傳[動態圖](http://hackage.haskell.org/package/dynamic-plot-0.2.2.0/docs/Graphics-Dynamic-Plot-R2.html),這種類型的事情自動。 (但是在標籤等方面遠不如功能豐富。) – leftaroundabout

回答

5

挖到source of the Chart,也許我找到了解決方案。

這裏是工作代碼。你可以改變func到任何你喜歡的

這將顯示y軸10,20,30,40的標籤,當實際數據100,200,300,400

import Graphics.Rendering.Chart.Easy 
import Graphics.Rendering.Chart.Backend.Diagrams 

func :: Int -> String 
func x = show $ x `quot` 10 

vals :: [(Int,Int)] 
vals = [(1,100),(2,200),(3,300),(4,400)] 
main = do 
    toFile def "test.svg" $ do 
    layout_title .= "test" 
    layout_y_axis . laxis_generate .= autoScaledIntAxis(LinearAxisParams{ 
     _la_labelf = map func, 
     _la_nLabels = 5, 
     _la_nTicks = 10 
     }) 
    plot $ points "Score" vals 
+0

這很不錯,謝謝!我去了func:(\ y - > TL.unpack $ FO.format(FO.prec 3 FO。%「GB」)$(fromIntegral y)/ 1073741824.0)。它給出了一些相當不錯的結果,我可能不得不根據結果來調整精度,但這沒關係 – Ulrar