Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

First of all, I like to use Python, because it is easy to work with. I am not a programmer, so I prefer anything that is easy to use and understand. I understand that it might be faster to program 3D in C/C++ or whatever, but that is beyond my scope.

Now, I wish to create a 3D plot of lots of data points (from a scientific sonar). I get roughly 5-10 updates per second and each update contains thousands of points. So the drawing of the 3D plot needs to be fast. Below the 3D plot I want to have a 2D plot "seen from above", and to the right another 2D plot "seen from the side". Both of these 2D plots will be updated at the same time as the 3D plot, with the same number of points. At any time I will want to pause the real time playback of data and select points from the 2D plots and extract data from those points.

I also wish to represent the points with different size and color depending on target strength. And in the paused selection-mode, show the selection by changing color of selected points and/or make individual points blinking or similar (apply two different selections at once).

I've done a bit of research, and it seems like Enthought has some nice tools. First of all Mayavi for the 3D plot, and then Chaco for the 2D plots. These seem to have nice built-in functionality of selecting points etc. But I am a bit concerned about the plotting speed. Are they able to plot thousands of points 5-10 times per second in real time? Also, maybe I missed something during my research and there are better alternatives out there? E.g. how much work is it to code directly for OpenGL and is it worth the extra hassle in this case? Or some gaming engine? Or matplotlib?

I would appreciate any advice I can get on this. And if it is platform independent, all the better. I am using both Ubuntu and Windows7.

share|improve this question

closed as not constructive by MichaelT, Glenn Nelson, GlenH7, Martijn Pieters, Walter Feb 1 '13 at 16:54

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

I am not a programmer: you should become one before embarking on such a project. pygame may help you. –  Sardathrion Feb 1 '13 at 12:46
This question is kind of like "what is the best way to eat a cookie?" The answer is ; there are many ways, but none as good as the one you feel comfortable with. –  Timothy Groote Feb 1 '13 at 13:49
Timothy: You answer says "Any module for presenting graphics has the same performance on any computer". I don't believe this is true. My question is related to 1) performance and 2) ease of use from a programming perspective. Sardathrion: I have written software before. But I am not working full time on programming; I am a scientist and I occasionally use programming to accomplish things. What I meant was that I am not familiar with all the different solutions that might be available and I have no intention of learning a bunch of programming languages and choose whatever language fits best. –  GaRyu Feb 1 '13 at 14:49

2 Answers 2

Python would be fast enough - if you aren't doing anything with the data in python.

Assuming the data grabbing, manipulation and display tasks are handled by python libraries then the actual processing is done in the compiled libs, eg numpy array calcs, are just as fast as in a C program. You are just useing python to glue these components together and provide the control flow.

For display of image data I would look at matplotlib or opencv

For scientific use of python scipy is a good place to start.

share|improve this answer

You're going to have huge performance problems.

  1. Opengl normally requires all data to be precalculated(and saved to memory) to get frame rates working. No modifications to the data on the fly is allowed. It just jumps from one dataset to another.
  2. Any cpu calculation of the data is going to be too slow
  3. Good plan is separate precalculation time and visualisation time. If you spend about 2 minutes precalculating, you can get good frame rates for for all the data.
share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.