2012-02-06 28 views
5

我试图找到绘图,可用于高性能应用程序的数据(主要是线图和等)的工具。我的数据窗口通常包含500到几千个点,我很高兴10个左右的帧率。我在套接字上以二进制流的形式接收我的数据。我在Mac OS X高性能的实时数据显示

我已经尝试了几种解决方案,并在下面我跟他们讨论我的经验。

R:极其缓慢,无法跟上,痛苦地阅读套接字,图形闪烁。

matplotlib:很慢,但也有点可用。然而,它需要大量的Python机器才能运行,而IMO的API非常不透明。在不断更新的情况下,包含该图形的窗口变为模态,并显示Mac海滩球 - 对用户交互来说不是很好。

的Gnuplot:更好的性能和API。但是,向gnuplot传送大量数据是通过生成临时ASCII(!)文件发生的 - 这意味着如果帧速率上升,我开始执行大量磁盘读取操作,这是性能问题。

其他建议?使用管道的数据,而不是临时文件

+0

您的问题似乎与我的相似:http://stackoverflow.com/questions/8946474/is-it-possible-to-speed-up-matlab-plotting-by-calling-cc-code-in-matlab – memyself 2012-02-06 17:04:58

+0

我不确定是否可以在C++或其他语言之外执行此操作,但是通过将内容位图绘制到屏幕上,可以防止闪烁。这实际上更快,因为它不会在绘制过程中剪切为重叠的矩形。而且,即使不是,用户看起来也很快。 – 2012-02-06 17:35:14

+0

@MikeDunlavey谢谢 - 但您使用什么技术来绘图和绘画。 – Jake 2012-02-06 20:03:26

回答

4

尝试gnuplot的。实例:

plot "data_acquisition_cmd <" with image 

可以通过管道中replots源源不断通过从管道读取命令,以及:

load "while [ 1 ]; do echo 'replot'; done <" 

对于更稳健的解决方案,可以考虑使用一个接口从Perl来GNUPLOT,如GnuplotIF或Python(gnuplot.py),因为它们允许对gnuplot进行编程控制,并且能够将数据直接传递给它。

编辑:感谢Jonhoo的语法修正

+0

对于那些试图使用这个并得到一堆错误的人来说,与领先的<,它应该都正常工作 – 2013-10-30 18:52:54

+0

@Jonhoo:这是一个特定于平台的事情,还是应该修改答案? – 2013-11-01 11:49:38

+0

从我可以从[gnuplot文档](http://gnuplot.info/docs_4.6/gnuplot.pdf)可以看出,''是唯一可以接受的方式来将数据从外部脚本管道传输到gnuplot数据(p83)和“加载”(p71)。 '|'仅用于输出操作,用于将gnuplot输出到某处('save','print'或'output')。 – 2013-11-01 14:29:03

0

Qwt库有一个实时绘制数据的能力。源代码树中甚至有几个例子提供了不同的实时绘图方法。值得注意的是,我建议您看看示波器,更新测试和实时示例。

此外,同时也出现了,可能是有帮助的邮件列表上recent discussion