From: Dmitri G. <gri...@gm...> - 2009-06-17 19:09:47
|
Hi all, I'm thinking about writing an interactive data plotting application with plplot. Data is ngspice simulation results. I want it to be an easy-to-use application tailored for ngspice with features useful when exploring circuit simulation results. I'm writing to the list to get some advice about implementation details of the features. Some of the features I want to implement are easy with plplot (multiple subpages, Bode plots). But I want to ask your advice about implementing some other features, specifically: * zoom in/out; * scrolling when zoomed plot doesn't fit into the window. As far as I have found from documentation, there is no built-in support for zoom. (Well, there is plsdiplt(), but it zooms the whole plot. I want to zoom into data, leaving axes where they were.) Nevertheless, zoom should be easy to implement with just re-plotting the "visible" part of the data array. The most important feature that I miss in other data plotting applications (and the reason to write my own) is the ability to make measurements on the plot. That is, I want the user to be able to pick data points on the plot to implement the following features: * place a label on the plot with the actual data for the point; * find the distance on X and Y axes between two points. Here's a quick mockup of what I want: http://img29.imageshack.us/img29/5403/plplot.png The problem with plGetCursor() is that it receives the event itself. If I create the window myself with GTK or Qt, then my code will receive the event. After reading the source, it seems that plTranslateCursor() should do the task. Can you suggest what driver should I use? I think about using GTK and extcairo. But in future I want to port the application to Windows. Should a Qt application be easier to port than a GTK one? Regards, Dmitri Gribenko -- main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gri...@gm...>*/ |
From: Hezekiah M. C. <hez...@us...> - 2009-06-17 20:12:53
|
On Wed, Jun 17, 2009 at 3:08 PM, Dmitri Gribenko<gri...@gm...> wrote: > Hi all, > > I'm thinking about writing an interactive data plotting application > with plplot. Data is ngspice simulation results. I want it to be an > easy-to-use application tailored for ngspice with features useful when > exploring circuit simulation results. I have some research tools I have written using Gtk + Cairo + PLplot using the extcairo driver which cover most, though perhaps not all, of the capabilities you've discussed. I have been fairly happy with this combination, though I have not tried Qt + the extqt driver largely because I do most of my programming in OCaml and OCaml does not have usable bindings for Qt4 yet. There are a few point-by-point comments below. > I'm writing to the list to get some advice about implementation > details of the features. > > Some of the features I want to implement are easy with plplot > (multiple subpages, Bode plots). But I want to ask your advice about > implementing some other features, specifically: > * zoom in/out; > * scrolling when zoomed plot doesn't fit into the window. > > As far as I have found from documentation, there is no built-in > support for zoom. (Well, there is plsdiplt(), but it zooms the whole > plot. I want to zoom into data, leaving axes where they were.) > Nevertheless, zoom should be easy to implement with just re-plotting > the "visible" part of the data array. This is likely the simplest method. Define the new region you want plotted and then replot the data within that domain. One additional method I have used it to show the full plot in one portion of the application window, with a zoomed-in view of a specific region of the plot in another portion of the app window. This can be done using multiple plot streams or by simply showing a zoomed-in view of the plot driver's surface (in my case, a Cairo surface). Both Gtk + Cairo and Qt should provide the means to do this. > The most important feature that I miss in other data plotting > applications (and the reason to write my own) is the ability to make > measurements on the plot. That is, I want the user to be able to pick > data points on the plot to implement the following features: > * place a label on the plot with the actual data for the point; > * find the distance on X and Y axes between two points. > > Here's a quick mockup of what I want: > http://img29.imageshack.us/img29/5403/plplot.png PLplot does not provide the means to retrieve data points directly, given a set of coordinates. However, it is possible to capture user input (for example, mouse clicks) at the GUI toolkit level, feed those coordinates to PLplot to get plot-world coordinates and then have the application check the raw data for the appropriate value. I've used this to add markers and annotations to plots/diagrams made with PLplot. > The problem with plGetCursor() is that it receives the event itself. > If I create the window myself with GTK or Qt, then my code will > receive the event. After reading the source, it seems that > plTranslateCursor() should do the task. For Gtk + Cairo + extcairo, I use a function which uses the following steps to get the plot-world coordinate information from a mouse click: 1. Gtk captures the mouse click 2. Cairo translates the Gtk-provided click coordinate to Cairo coordinates 3. The dimensions of the Cairo surface are used to convert these to normalized coordinates (0.0 - 1.0 in x and y) 4. Finally, give these normalized coordinates to PLplot (plcalc_world) to retrieve the plot-world coordinate of the mouse click This code is written in OCaml, but the function calls are quite similar to what you would use in C or another language using these tools. I imagine the process would be rather similar using Qt rather than Cairo. I am in the process of a rather significant refactoring of this application's code, but I would be happy to share what I can. > Can you suggest what driver should I use? I think about using GTK and > extcairo. But in future I want to port the application to Windows. > Should a Qt application be easier to port than a GTK one? The QSAS folks who contributed the Qt plot driver for PLplot use PLplot and Qt in their development (http://www.sp.ph.ic.ac.uk/csc-web/QSAS/). They provide binaries for (at least) Linux, Windows and OSX. I have not tried to port any of my code to non-Linux systems yet, so I can not comment on the relative ease of porting Gtk vs Qt applications. Best of luck with your efforts in this! Hez -- Hezekiah M. Carty Graduate Research Assistant University of Maryland Department of Atmospheric and Oceanic Science |
From: Steve S. <s.s...@im...> - 2009-06-17 20:39:23
|
Dmitri, QSAS ( http://www.sp.ph.ic.ac.uk/csc-web/QSAS ) will do nearly everything you describe, although it may be an overkill for you in some respects. It is also open source so that if you wanted to add some features you could (in principle). While it's targeted at time-series data, it also works perfectly well with other data. Other aspects that might interest you (or might not) include being able to manipulate the data including passing it through your own "plugin" modules to generate new data products. The plotting is fully interactive and you can easily select regions and zoom in, select ranges and save the X and/or Y limits, etc. There is the ability to label things, but not with the value of the data point. To get data into qsas requires the writing of a suitable header to describe it. This is pretty easy; if you sent us a sample data file and told us what the columns were I could one for you. You might find that qsas is more than you need (likely, at least in some respects), and that it is sufficiently large that modifying it or writing plugins presents you with a steeper learning curve than you wish, but it might at least be worth trying to install it and play with the sample data that comes with it to see what it will do. Regards, Steve On Wed, 2009-06-17 at 20:08 +0100, Dmitri Gribenko wrote: > Hi all, > > I'm thinking about writing an interactive data plotting application > with plplot. Data is ngspice simulation results. I want it to be an > easy-to-use application tailored for ngspice with features useful when > exploring circuit simulation results. > > I'm writing to the list to get some advice about implementation > details of the features. > > Some of the features I want to implement are easy with plplot > (multiple subpages, Bode plots). But I want to ask your advice about > implementing some other features, specifically: > * zoom in/out; > * scrolling when zoomed plot doesn't fit into the window. > > As far as I have found from documentation, there is no built-in > support for zoom. (Well, there is plsdiplt(), but it zooms the whole > plot. I want to zoom into data, leaving axes where they were.) > Nevertheless, zoom should be easy to implement with just re-plotting > the "visible" part of the data array. > > The most important feature that I miss in other data plotting > applications (and the reason to write my own) is the ability to make > measurements on the plot. That is, I want the user to be able to pick > data points on the plot to implement the following features: > * place a label on the plot with the actual data for the point; > * find the distance on X and Y axes between two points. > > Here's a quick mockup of what I want: > http://img29.imageshack.us/img29/5403/plplot.png > > The problem with plGetCursor() is that it receives the event itself. > If I create the window myself with GTK or Qt, then my code will > receive the event. After reading the source, it seems that > plTranslateCursor() should do the task. > > Can you suggest what driver should I use? I think about using GTK and > extcairo. But in future I want to port the application to Windows. > Should a Qt application be easier to port than a GTK one? > > Regards, > Dmitri Gribenko > -- +-------------------------------------------------------------------+ Professor Steven J Schwartz Phone: +44-(0)20-7594-7660 Head, Space & Atmospheric Physics Fax: +44-(0)20-7594-7900 The Blackett Laboratory E-mail: s.s...@im... Imperial College London Office: Huxley 711A London SW7 2AZ, U.K. Web: www.sp.ph.ic.ac.uk/~sjs +-------------------------------------------------------------------+ |
From: Dmitri G. <gri...@gm...> - 2009-06-18 23:04:49
|
On Wed, Jun 17, 2009 at 11:40 PM, Steve Schwartz <s.s...@im...> wrote: > QSAS ( http://www.sp.ph.ic.ac.uk/csc-web/QSAS ) will do nearly > everything you describe [...] I've just played with QSAS a bit, but it seems that QSAS is written for a different workflow than I need. I intend to write a replacement for the program (ngnutmeg) that ngspice currently uses to display plots when they are requested in interactive command mode. That is, the program should be targeted for quick viewing of plots. But QSAS is more suitable for long analysis of data from a single experiment (too many mouse clicks to get a plot, though session management is a strong point). Regards, Dmitri -- main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gri...@gm...>*/ |
From: Alan W. I. <ir...@be...> - 2009-06-17 21:13:42
|
On 2009-06-17 22:08+0300 Dmitri Gribenko wrote: > > [...]Can you suggest what driver should I use? I think about using GTK and > extcairo. But in future I want to port the application to Windows. > Should a Qt application be easier to port than a GTK one? Hi Dmitri: I don't think you need to be concerned about the windows platform for either GTK+ or Qt4. There is a downloadable stack of windows libraries for GTK+ available at http://www.gtk.org/download-windows.html. And a downloadable Qt4 software development kit is available for windows (and Linux and Mac OS X) at http://www.qtsoftware.com/downloads. One should be legitimately concerned about the relative maturity of our qt device driver (released in May this year) compared to the older cairo device driver (released in March of 2007). The qt device driver has been developed quite rapidly and now has essentially all the features that you get with the cairo device driver. However, there are still probably a few hard-to-find qt bugs left (such as the recently discovered poor interactive behaviour for the 17th example). But the number of such hard-to-find bugs should be reduced over the next few months as we respond to the expected bug reports made by our users and developers who attempt to use the qt device driver for a variety of platforms and use cases. So in the medium and long term that leaves which toolkit (GTK+ or QT4) you are most comfortable working with as the most important consideration driving your choice of toolkit. Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); PLplot scientific plotting software package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ |
From: Vadim Z. <vz-...@ze...> - 2009-06-17 22:30:20
|
On Wed, 17 Jun 2009 22:08:27 +0300 Dmitri Gribenko <gri...@gm...> wrote: DG> Some of the features I want to implement are easy with plplot DG> (multiple subpages, Bode plots). But I want to ask your advice about DG> implementing some other features, specifically: DG> * zoom in/out; DG> * scrolling when zoomed plot doesn't fit into the window. Hello, I've recently had to do something similar and while I can't unfortunately share the source for it, it was relatively straightforward to do: while PLplot didn't really help much with it, it does provide all you need to implement this yourself. Concerning measurements on the plot, the hints given in the thread starting at http://www.mail-archive.com/plp...@li.../msg02381.html were helpful. FWIW I used wxWidgets driver for my application. Good luck, VZ |
From: Geoffrey F. <Geo...@at...> - 2009-06-19 03:57:11
|
Dmitri Gribenko writes: > I'm writing to the list to get some advice about implementation > details of the features. > > Some of the features I want to implement are easy with plplot > (multiple subpages, Bode plots). But I want to ask your advice about > implementing some other features, specifically: > * zoom in/out; > * scrolling when zoomed plot doesn't fit into the window. The Tk driver has zooming and panning. You might find that it suits your needs. There are cases where one needs something considerably more powerful. My own work, over the last nearly a decade, is in the area of IC physical design. Here we have a situation where there is geometric detail *everywhere* within the bounds of the chip. And the variation in spatial scales ranges from a centimeter to a fraction of a micron. So, roughly 5 orders of magnitude, give or take. In such a situation, you cannot just draw everything, and then leave it to the graphics driver to "redisplay" some zoom zone by running through 100 MB's of vector drawing history looking to see what's in the new field of view. That would just take too long. And, oh, also, there's the business with resolution of the PLplot coordinates as stored in the history buffer. If you zoom in by 10,000 X, then you find that the plot gets "blurry". Things that are supposed to be distinct, get run together by the finite precision representation of the plot data which PLplot uses. To overcome this, we built "zoom handler" support into the Tk driver. If you capture the zoom events you can then handle the redisplay operation in the application. With a structured geometry database (commin in IC CAD applications), you can make intelligent decisions about what to draw, based on the viewport, the size of the viewport in relation to the size of various possible structural elements the user might want to see, etc. This is sort of the opposite of having it be done somehow automatically by the plot library. Rather, you do all the work of intelligent display in tha application. But the result can be dramatically better than anything you could ever hope to get out of a re-rendering of a plot history buffer inside the plotter library. Combining this application-directed intelligent redisplay (triggered in an event driven manner by implementing the zoom handler hooks) with PLplot's support for "double buffering" in the X/Tk driver, lets you build an application which can support extremely efficient and *smooth* (flicker free) transitions as the zoom window changes. So, that's an option. It's a lot of work to set it up, but it can be worth it if your geometric field is sufficiently complex and structured. -Geoff |