带有 Haskell 图表的人类可读数字
Human readable numbers with Haskell Charts
我正在尝试使用 Haskell-图表 (http://hackage.haskell.org/package/Chart) to generate some graphs. It works fine and I get a nice graph
我唯一的 "problem" 是左边的数字,有点难读。有没有办法提供一个在显示之前转换这些数字的函数?
我可以在绘图之前转换数字,但我会失去精度。我一直在查看该文档,但我没有看到它,如果它存在的话。
谢谢
编辑:这是代码。
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])
不幸的是,我从数据库中获取数据,但无法授予 public 访问权限。但是 [(LocalTime, Int)] 的大数字列表应该会给你类似的东西。我正在使用 Diagrams 后端 btw
深入研究 source of the Chart,也许我找到了解决方案。
这是工作代码。您可以将 func
更改为您喜欢的任何内容
当实际数据为 100,200,300,400
时,这将显示 y 轴的标签 10,20,30,40
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
我正在尝试使用 Haskell-图表 (http://hackage.haskell.org/package/Chart) to generate some graphs. It works fine and I get a nice graph
我唯一的 "problem" 是左边的数字,有点难读。有没有办法提供一个在显示之前转换这些数字的函数? 我可以在绘图之前转换数字,但我会失去精度。我一直在查看该文档,但我没有看到它,如果它存在的话。
谢谢
编辑:这是代码。
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])
不幸的是,我从数据库中获取数据,但无法授予 public 访问权限。但是 [(LocalTime, Int)] 的大数字列表应该会给你类似的东西。我正在使用 Diagrams 后端 btw
深入研究 source of the Chart,也许我找到了解决方案。
这是工作代码。您可以将 func
更改为您喜欢的任何内容
当实际数据为 100,200,300,400
10,20,30,40
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