3

我正在尝试使用 Haskell-Charts ( http://hackage.haskell.org/package/Chart ) 来生成一些图表。它工作得很好,我得到了一个很好的图表在此处输入图像描述

我唯一的“问题”是左边的数字,这有点难以阅读。有没有办法提供一个函数来在显示它们之前转换这些数字?我可以在绘图之前转换数字,但我会失去精度。我一直在看文档,但我没有看到它,如果它存在的话。

谢谢

编辑:这是代码。

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)] 列表应该给你类似的东西。我正在使用图表后端顺便说一句

4

1 回答 1

5

挖掘Chart 的来源,也许我找到了解决方案。

这是工作代码。你可以换成func你喜欢的任何东西

这将显示 y-axis 的标签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
于 2017-09-21T09:12:36.837 回答