2012-02-06 2 views
5

나는 고성능 애플리케이션에 사용할 수있는 데이터 (주로 선 그래프 등)을 플로팅 도구를 찾기 위해 노력하고있어. 내 데이터 창은 일반적으로 500에서 수천 개의 점을 포함하며, 10 프레임 정도의 프레임에 만족합니다. 소켓에서 이진 스트림으로 데이터를 수신합니다. 나는 맥 OS X에 내가 몇 가지 솔루션을 시도했습니다고성능 실시간 데이터 표시

오전, 나는 아래 그들과 나의 경험을 토론한다.

R : 무서운 속도로 느려지고 계속 읽을 수없고, 소켓 읽기에 고통스럽고, 그래프 깜박임.

matplotlib : 상당히 느리지 만 사용하기 쉽습니다. 그러나 실행하려면 많은 양의 Python 기계가 필요하며 IMO API는 꽤 불투명합니다. 상수 업데이트 중 그래프가 포함 된 창이 모달이되고 Mac beachball이 나타나 사용자 상호 작용에 적합하지 않습니다.

의 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

+0

C++이나 다른 언어를 사용하지 않고도이 작업을 수행 할 수 있는지 확실하지 않지만 메모리 비트 맵에 페인팅 한 다음 화면에 표시하여 깜박임을 방지합니다. 페인트가 진행되는 동안 겹치는 사각형으로 자르지 않기 때문에 실제로 더 빠릅니다. 또한 사용자에게는 그렇지 않더라도 빨리 보입니다. –

+0

@MikeDunlavey 감사합니다. 그러나 음모 및 그림을 그리기 위해 어떤 기술을 사용하십니까? – Jake

답변

4

해보십시오의 gnuplot. 사용 예제 :

plot "data_acquisition_cmd <" with image 

할 수 있습니다뿐만 아니라 파이프에서 명령을 읽어 replots의 끝없는 스트림 파이프 :보다 강력한 솔루션을

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

를, 펄에서의 gnuplot 수있는 인터페이스를 사용하는 것이 좋습니다 GnuplotIF 같은, 또는 파이썬 (gnuplot.py), 그들은 프로그램의 gnuplot의 제어와 직접 데이터를 전달 할 수있는 능력을 모두 허용하기 때문이다.

편집 : 구문 보정 주셔서 감사합니다 Jonhoo을

+0

이것을 시도하고 많은 오류가 발생하는 경우, | 최고의 <와 함께, 그리고 그것은 모두 올바르게 작동해야합니다 –

+0

@ Jonhoo : 그 플랫폼 특정 일입니까, 아니면 내가 대답을 수정해야합니까? –

+0

[gnuplot documentation] (http://gnuplot.info/docs_4.6/gnuplot.pdf)에서 알 수 있듯이,'< '는 외부 스크립트에서 데이터를 gnuplot으로 파이프하는 유일한 방법입니다 (p83) 및 '로드 (p71)'의 경우. '|'는 gnuplot의 출력을 어딘가에 파이프하기를 원하는 출력 작업에 대해서만 사용됩니다 ('save','print' 또는'output'). –

0

Qwt 라이브러리는 실시간으로 데이터를 플롯 할 수있는 기능이 있습니다. 소스 트리에는 실시간으로 플로팅하는 여러 가지 방법을 제공하는 몇 가지 예제가 있습니다. 특히 오실로스코프, 리프레시 및 실시간 예제를 살펴볼 것을 권합니다.

또한 메일 링리스트에 recent discussion이 도움이 될 수 있습니다.