Graphing software - Page 1
Forum section: electronics / projects

author: Harvs
author_rank: Super Contributor
timestamp: September 30, 2016, 10:51:30 pm
content: I'm currently doing a lot of experimentation with a product that involves logging bunches of data from test events, then trawling through it to find interesting bits.Up until now I've been using gnuplot, octave and occasionally excel as the old favourites, but I find they're just too cumbersome for what I'm doing. What I need are things we'd typically expect on oscilloscopes and the like:- Good zooming and panning that zooms the x & y scales properly in a readable fashion.- Dropping markers with automatic calculation of difference in time or height between them,- Getting point values by clicking on them,- Fast working with large data sets (up to maybe a dozen million points.)- Looks decent enough to show details to a customer without having to go re-render the portion of the graph in gnuplot.Everything I've found so far is very concentrated on the scientific market that wants to produce publication quality plots. I've done that with gnuplot/octave and it works as that sort of tool. But what I want is a tool to quickly work through lots of data to make decisions on, like whether I need to re-do a test. Happy to spend a reasonable amount of money.Thanks

author: qwaarjet
author_rank: Regular Contributor
timestamp: October 01, 2016, 10:07:17 pm
content: I've used DIAdem from National Instruments for similar tasks. It churns through several GB of data pretty easy.

author: G0HZU
author_rank: Super Contributor
timestamp: October 01, 2016, 11:59:28 pm
content: I'd be interested to see what gets suggested here. For many years I've been using MSChart within VB for stuff like this but it is far from ideal.For example, see the video below for a quick and dirty IQ file reader and converter/cropper program that I created last year that reads in and displays IQ data from Agilent's 89600 waveform capture SW and the idea is to display and convert the IQ data for upload to an Agilent E4433B vector sig gen for playback. MSChart does allow a few tricks using the mouse so you can get data from the mouse on the trace and set the zoom etc. It also allows the file start and stop locations to be cropped to prevent spectral spreading effects from phase discontinuities when the sig gen wraps/repeats the IQ data. It can also set the timing of trigger events at a chosen location using the mouse to click on the trace. This will generate a trigger pulse at that moment in the dataset from the sig gen to act as a trigger marker in the real hardware.It can hand a lot of data this way. I've written VB/MSChart programs that handle many megabytes of data in a file.However, MSChart is very clunky and restrictive (and old) and it would be nice to see something more modern and more powerful than this.https://youtu.be/ul2A8KeOQWs

author: ian.rees
author_rank: Contributor
timestamp: October 02, 2016, 05:48:32 am
content: I'd highly recommend learning just a little Python (go with version 3 if starting fresh) and using Jupyter. Attached image came from the code below, which took about 1 second to run on my laptop. Have heard good things about "Anaconda" which includes a bunch of handy tools in one package. Instead of generating your data like in the example, you'd read it in from a file, but that generally just takes a couple lines - for CSV:https://docs.python.org/3/library/csv.html.There are also some libraries for talking directly to test equipment from Python, for example pyvisa and python-ivi. -Ian-Code:%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltfrom scipy import signal# Make 1 million evenly spaced points in [0, 2*pi]numPoints = 1000000times = np.linspace(0, 2 * np.pi, numPoints)# compute sin(x) of each of those points, save result to sinewavesinewave = np.sin(times)# generate some gaussian noise to add (stdev=1)noise = np.random.standard_normal(numPoints)fuzzy = sinewave + noise / 20# Make a 10th order butterworth filter, cutoff 0.05 times Nyquist rateb, a = signal.butter(10, 0.05)# Apply that filter foward/backward to fuzzy datafiltered = signal.filtfilt(b, a, fuzzy)# Plot times on X, versus fuzzy and filtered dataplt.plot(times, fuzzy, label = "Measured Data")plt.plot(times, filtered, label = "Smoothed")plt.xlabel("Times")plt.ylabel("Values")plt.title("Example plot")plt.legend()plt.grid()

author: ian.rees
author_rank: Contributor
timestamp: October 02, 2016, 06:00:42 am
content: Sorry, I forgot to mention that the interactive aspect of the OP's question can be handled through ipywidgets -http://ipywidgets.readthedocs.io/en/latest/index.htmlThere's been a lot of development going on in Jupyter lately, so it's easy to find outdated examples online. -Ian-

author: Harvs
author_rank: Super Contributor
timestamp: October 02, 2016, 06:38:42 am
content: Quote from: qwaarjet on October 01, 2016, 10:07:17 pmThanks, looks like a nice piece of software, but too many $$$ for this task. I was hoping in the low hundreds as apposed to thousands.

author: Harvs
author_rank: Super Contributor
timestamp: October 02, 2016, 06:55:14 am
content: Quote from: ian.rees on October 02, 2016, 05:48:32 amI've used python a lot in the past for graphing, and it's good where you're repeatedly doing the same things. But it's a similar solution using gnuplot/octave, with the possibility for some dynamic updating (which is I guess what you're talking about with ipwidgets.But this is all rather clunky.Surely there's some sort of shrink wrapped solution that doesn't cost as much as full blown CAD suite?

author: Karel
author_rank: Super Contributor
timestamp: October 02, 2016, 07:15:16 am
content: Quote from: Harvs on September 30, 2016, 10:51:30 pmSounds like you haven't yet discovered EDFbrowser:http://www.teuniz.net/edfbrowser/EDFbrowser expects time series data in the European Data Format (16 or 24-bit samples).It has also a built-in ASCII (csv) to EDF converter.

author: Someone
author_rank: Super Contributor
timestamp: October 02, 2016, 07:59:22 am
content: Octave should be able to do all this if you add some callbacks to the plot, its certainly possible in scilab:https://help.scilab.org/doc/5.5.2/en_US/datatipSetDisplay.htmlThe panning/zooming is already clean and tidy so you could wrap in some cursor detailing like horizontal+vertical markers and deltas. Exports to CSV or EPS will provide the crisp and professional look to the end product.