如何在Haskell图表库中设置轴的范围

如何在Haskell图表库中设置轴的范围,haskell,haskell-lens,haskell-chart,Haskell,Haskell Lens,Haskell Chart,在haskell图表中,如何更改轴的范围?它似乎与镜头和视口有关,但作为Haskell的初学者,我很难阅读API: 谢谢你的帮助 我肯定会很感激提供更好的方法,或者更多关于如何使用镜头的信息(我还是不太明白这是怎么回事) 我要试一试。这将是一个粗略的解释,不仅是为了保持简单,而且因为我仍然掌握着镜头的窍门。在开始之前,请注意,您已链接到图表0.14的文档,该版本早于API到lens的转换。这里是你应该参考的。现在,请看您的代码片段: layout_y_axis . laxis_generate

在haskell图表中,如何更改轴的范围?它似乎与镜头和视口有关,但作为Haskell的初学者,我很难阅读API:

谢谢你的帮助

我肯定会很感激提供更好的方法,或者更多关于如何使用镜头的信息(我还是不太明白这是怎么回事)

我要试一试。这将是一个粗略的解释,不仅是为了保持简单,而且因为我仍然掌握着镜头的窍门。在开始之前,请注意,您已链接到图表0.14的文档,该版本早于API到lens的转换。这里是你应该参考的。现在,请看您的代码片段:

layout_y_axis . laxis_generate .~ scaledAxis def (0,1)
这是一个应用于布局的函数。其中,
layou\u y\u轴
laxis\u生成
是镜头。镜头是参考;在本例中,引用数据类型中的字段。在简单的使用案例中,镜头看起来有很多字段标签,不同的是,与唱片标签不同,镜头是一流的,可以用它们做很多有趣的事情。事实上,镜头是可以由
()
组成的功能;然而,这篇作文是从左到右完成的,与哈斯克尔的惯常做法相反。因此:

layout_y_axis . laxis_generate
layout_y_轴
是对布局中某个字段的引用,
laxis_generate
是对轴中某个字段的引用(根据文档,“生成轴数据的函数”);组合它们(以相反的/OO顺序)可以参考布局Y轴的生成函数

除了镜头本身之外,片段的另一个关键部分是
(.~)
,这是其中之一。它产生setter函数;也就是说,它接受一个引用和一个值,并生成一个设置引用目标的函数。在本例中,您将得到一个函数,该函数使
scaledAxis def(0,1)
成为布局Y轴的生成函数

现在,如果您查看透镜的文档,您不仅会发现透镜,还会发现
\u layout\u y\u轴
\u laxis\u generate
,它们分别是
布局
布局轴
的字段。它们是透镜的背衬场;事实上,镜头可以,在这种情况下,是由它们自动生成的。考虑到模块导出字段标签,您可以在不使用镜头的情况下编写函数,只需使用记录语法:

\lay -> lay
    { _layout_y_axis =
        (\yax -> yax { _laxis_generate = scaledAxis def (0,1) })
        $ _layout_y_axis lay
    }
然而,这实在是太难看了。lens可以做的不仅仅是改进糟糕的语法;在任何情况下,对于像
Chart
这样的库来说,字段操作在整个API中都是完成的,用整洁且可组合的东西替换通常的嵌套记录语法已经是一件非常好的事情了


注意:在图表1.9中的“简易”模块中,使用
=
而不是
~

将合格的Graphics.Rendering.Chart.Backend.Cairo导入为C
导入合格的Graphics.Rendering.Chart.Easy作为C
绘图仪输出文件点=
C.toFile C.def输出文件$do
C.布局y轴。C.laxis_生成C..=C.scaledAxis C.def(0,1)
C.绘图(C.点“n_咖啡”点)——等。

我刚想出来。如果您有一些y轴,那么通过附加
$layout\u y\u轴∘ laxis_generate.~scaledAxis def(0,1)
对于布局函数,我可以强制轴的范围在0和1之间。我肯定会很感激提供更好的方法,或者更多关于如何使用镜头的信息(我还是不太明白这是怎么回事)。