快速绘图库

Isa*_*aac 6 java clojure

我一直在使用Incanter来满足我的图形需求,这对我之前的需求来说已经足够但速度很慢.

现在我需要在JPanel中嵌入一个图形.用户需要通过拖动和单击与图形交互(例如,单击程序需要接收和处理的某些点).放大出局也是必须的.

我在其他SO讨论中听说过JFreeChart,但是我看到Incanter使用它作为它的图形引擎,然后它看起来有点慢.它实际上很快,但也许Incanter做的事情会减慢它的速度?

我正在绘制高达200万点(简单的xy-plot,真的),但通常会减少图形.使用Matlab,这可以在几秒钟内绘制,但Incanter可以挂起几分钟.

那么JFreeChart是如何走的?或者其他什么,考虑到我的需求?

(此外,它需要是免费的,因为它适用于研究.)

mik*_*era 5

不幸的是,通用图形解决方案可能无法很好地扩展到200万点 - 这足够大,如果你想要交互式性能,你将需要一些专门的东西.

我可以看到一些明智的选择:

  • 编写您自己的自定义"绘图仪"功能,该功能针对绘制大量点进行了优化.您必须对其进行测试,但我认为您可以通过在紧密循环中使用setRGB将点直接写入BufferedImage来获得所需的性能.如果仍然不够快,可以将点直接写入字节数组并构造MemoryImageSource.

  • 排除点数,这样您最多只能绘制10,000点.只要您只关心散点图的整体形状而不是单个点,这可能是完全可以接受的.

  • 将所有点预渲染为例如大的BufferedImage,然后允许用户放大和缩小/与该静态图像交互.您可以"破解"JFreeChart来执行此操作.

  • 如果OpenGL是一个选项(将需要本机代码+陡峭的学习曲线!),然后将所有点放在一个大的顶点阵列中,并让显卡为你完成所有操作.将毫不费力地实时处理200万点.