2012-02-06 46 views
5

Tôi đang cố tìm một công cụ để vẽ sơ đồ dữ liệu (hầu hết là biểu đồ đường kẻ) và có thể được sử dụng cho các ứng dụng hiệu suất cao. Cửa sổ dữ liệu của tôi thường chứa từ 500 đến vài nghìn điểm và tôi sẽ hài lòng với tốc độ khung hình 10 hoặc hơn. Tôi nhận dữ liệu của mình dưới dạng luồng nhị phân trên ổ cắm. Tôi đang sử dụng Mac OS X.Hiển thị dữ liệu thời gian thực hiệu suất cao

Tôi đã thử một số giải pháp và tôi thảo luận về trải nghiệm của mình với chúng bên dưới.

R: Dreadfully chậm và không thể theo kịp, đau đớn khi đọc ổ cắm, đồ thị nhấp nháy.

matplotlib: Khá chậm nhưng cũng có thể sử dụng được. Tuy nhiên, nó đòi hỏi một tấn máy móc Python để chạy, và IMO API khá mờ. Theo cập nhật liên tục, cửa sổ chứa biểu đồ trở thành phương thức và quả bóng bãi biển Mac xuất hiện - không tuyệt vời cho tương tác của người dùng.

Gnuplot: Hiệu suất và API tốt hơn nhiều. Tuy nhiên, việc truyền số lượng lớn dữ liệu tới gnuplot xảy ra bằng cách tạo các tệp ASCII (!) Tạm thời - điều này có nghĩa là tốc độ khung hình của tôi tăng lên, tôi bắt đầu thực hiện tấn đọc đĩa và đây là vấn đề hiệu suất.

Bất kỳ đề xuất nào khác?

+0

câu hỏi của bạn có vẻ tương tự như của tôi: http://stackoverflow.com/questions/8946474/is-it-possible-to-speed-up-matlab-plotting-by-calling-cc-code-in-matlab – memyself

+0

Tôi không chắc chắn nếu bạn có thể làm điều này bên ngoài của C + + hoặc ngôn ngữ khác, nhưng tôi ngăn chặn nhấp nháy bằng cách vẽ vào một bitmap bộ nhớ và sau đó blitting nó vào màn hình. Điều này thực sự nhanh hơn vì nó không cắt thành hình chữ nhật chồng chéo trong quá trình vẽ. Ngoài ra, với người dùng nó có vẻ nhanh chóng ngay cả khi nó không. –

+0

@MikeDunlavey Cảm ơn - nhưng bạn sử dụng công nghệ nào để thực hiện việc vẽ và vẽ. – Jake

Trả lời

4

Hãy thử gnuplot sử dụng dữ liệu đường ống thay vì tệp tạm thời. Ví dụ sử dụng:

plot "data_acquisition_cmd <" with image 

Bạn có thể đường ống trong một dòng bất tận của replots bằng cách đọc lệnh từ một đường ống cũng như:

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

Đối với một giải pháp mạnh mẽ hơn, xem xét sử dụng một giao diện để gnuplot từ Perl, như GnuplotIF hoặc Python (gnuplot.py), vì chúng cho phép kiểm soát cả chương trình của gnuplot và khả năng chuyển dữ liệu trực tiếp đến gnuplot.

Edit: Cảm ơn Jonhoo cho việc sửa cú pháp

+0

Đối với những người cố gắng này và nhận được một loạt các lỗi, thay thế dấu chấm | với hàng đầu

+0

@ Jonhoo: đó có phải là điều cụ thể cho nền tảng hay tôi nên sửa đổi câu trả lời? –

+0

Từ những gì tôi có thể biết từ [tài liệu gnuplot] (http://gnuplot.info/docs_4.6/gnuplot.pdf), '<' là cách duy nhất được chấp nhận để truyền dữ liệu từ tập lệnh bên ngoài sang gnuplot cho cả dữ liệu (p83) và cho 'tải' (p71). '|' chỉ được sử dụng, afaict, cho các hoạt động đầu ra mà bạn muốn sử dụng đường ống của gnuplot ở đâu đó ('save',' print' hoặc 'output'). –

0

Thư viện Qwt có khả năng vẽ dữ liệu theo thời gian thực. Thậm chí có vài ví dụ trong cây nguồn cung cấp các cách vẽ khác nhau theo thời gian thực. Đáng chú ý, tôi muốn đề nghị xem xét oscilloscope, refreshtest và các ví dụ thời gian thực.

Ngoài ra, cũng có một số recent discussion trên danh sách gửi thư có thể hữu ích.

Các vấn đề liên quan