Cra*_*aig 7 haskell haskell-lens haskell-chart
在haskell图表中,如何更改轴的范围?它似乎与镜头和视口有关,但作为Haskell的初学者,我很难阅读API:
http://hackage.haskell.org/package/Chart-0.14/docs/Graphics-Rendering-Chart-Axis-Types.html
谢谢你的帮助!
我肯定会欣赏有关更好的方法的信息或有关镜头如何工作的更多信息(我仍然不明白这是做什么的).
我会去的.这将是一个粗略的解释,不仅仅是为了保持简单,而且因为我仍然得到镜头的支持.在开始之前,请注意您链接到图表0.14的文档,这是一个早于API转换为镜头的版本.以下是您应该参考的当前文档.现在,到您的代码段:
layout_y_axis . laxis_generate .~ scaledAxis def (0,1)
Run Code Online (Sandbox Code Playgroud)
这是一个应用于您的布局的功能.在这里面,layout_y_axis并laxis_generate有镜头.镜片是参考; 在这种情况下,引用数据类型中的字段.在简单的用例中,镜头看起来很多字段标签,除了与唱片标签不同,它们是一流的,并且可以用它们做很多有趣的事情.事实上,镜头是可以组成的功能(.); 然而,组合是从左到右完成的,与通常的Haskell实践相反.因此在:
layout_y_axis . laxis_generate
Run Code Online (Sandbox Code Playgroud)
layout_y_axis是对布局laxis_generate中的字段的引用,是对轴中的字段的引用("生成轴数据的函数",根据文档); 组合它们(以反向/ OO顺序)给出了对布局的Y轴的生成函数的引用.
除了镜头本身,你的片段的另一个关键部分是(.~)众多镜头操作员之一.它产生setter函数; 也就是说,它接受一个引用和一个值,并产生一个设置引用目标的函数.在您的情况下,您将获得一个函数,scaledAxis def (0,1)该函数生成布局的Y轴的生成函数.
现在,如果你选中的文件Graphics.Rendering.Chart.Layout你会发现不仅仅是镜头,而且还_layout_y_axis和_laxis_generate,这是领域Layout和LayoutAxis分别.它们是镜片的支撑领域; 实际上,镜片可以是,并且在这种情况下,是从它们自动生成的.鉴于模块导出了字段标签,您可以使用记录语法编写没有镜头的函数:
\lay -> lay
{ _layout_y_axis =
(\yax -> yax { _laxis_generate = scaledAxis def (0,1) })
$ _layout_y_axis lay
}
Run Code Online (Sandbox Code Playgroud)
然而,那太难看了.镜头可以做的不仅仅是改善讨厌的语法; 在任何情况下,对于像这样的库Chart,在整个API中进行字段操作,只需用一些整洁和可组合的东西替换通常的嵌套记录语法就已经是一件非常好的事了.
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |