Clojure中的交互式和动态绘图/图表

8

clojure是否有用于显示动态图表的库,例如简单的振荡正弦波形?

看过incanter库,但它似乎只提供静态图表。


1
如上所述,有Quil。此外,还有一个Incanter.processing模块可用。但不管怎样,所有的道路都通向Processing :) - user2524973
1
嗯...这是个人喜好的问题。我尝试过Quil,但不喜欢通过Processing模型工作。转而开始使用d3.js,它有自己的挑战--我不会撒谎--但更加数据导向。不过,Incanter处理模型是一个不错的想法。 - Mars
1个回答

6

虽然不是真正的绘图库,但您可以使用quil接口来使用Java Processing库。

如果您愿意使用Clojurescript,我建议您查看d3.jsstrokes库以从Clojurescript中使用它。 但是,这需要学习d3.js的古怪方法,并且即使您大部分代码都用Clojure编写,也需要考虑HTML,DOM,CSS和Javascript方面的思考。[编辑:我现在认为直接从Clojurescript使用d3.js更简单;strokes提供的好处很少。还有一些基于d3.js构建的Clojurescript图表库。例如,我发现NVD3很有用。]

还有一个全Clojurescript的C2库,旨在实现d3.js的某些功能,但不允许动态绘图,尽管您可以使用自定义CSS添加动态功能。(据我所知,C2并没有真正增长,但它正在积极维护。)
另一个选择可能更容易(或不容易),那就是使用一个做你想要的事情的Java库。毫无疑问,有几个库,包括JFreeChart。这也可能需要一点Java风格的思考,学习Clojure-Java互操作性(这取决于Java库的结构,从非常容易到丑陋、混乱和冗长)。
值得注意的是,有用于将Java与R接口的库,通过其内置的绘图、ggplot2库和lattice库具有非常好的绘图功能。因此理论上,您可以使用Clojure控制Java来控制R,但可能不值得。请参阅this question以获取Java到R库。
你还应该在Incanter Google组上提问。也许有一些隐藏的技巧,或者正在开发中的东西可以做到你想要的效果。
编辑:Incanter确实提供了一些称为"dynamic plots"的内容。我认为这不完全是你想要的:这些图表具有附加到滑块上的参数,以便您可以看到绘图随时间变化的情况。尽管如此,Incanter能够做到这一点的事实表明,创建一个根据数据变化动态变化的图表可能并不那么困难。
再编辑:由于JFreeChart是Incanter用于绘制图表的工具,并且JFreeChart是能够生成动态图表的Java库,因此一种选择是使用Incanter生成的图表对象上的Java方法,正如this answer所建议的那样。
(编辑:搜索“clojure jfreechart”会出现一些旨在帮助人们使用Clojure与JFreeChart的库和教程。)

还有一个编辑:https://github.com/liebke/apogee,看起来可能正是你想要的,jyriand。(我对相关问题很感兴趣,我不断注意到这个问题的新潜在答案。)


Incanter 看起来很有前途。 - user235273
在2020年,我建议看一下Scicloj列出的一些工具。例如,Vega-Lite和基于Vega-Lite构建的Hanami可以生成某些类型的动态图。 - Mars

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接