On 2020-02-14 15:01+0100 Xavier Cardil wrote:
Hi Alan: Thank you for sharing your code !
You are welcome.
I have been trying to integrate this in to my current python program without luck, as it's already pretty complex, so what I am doing now My program creates custom "subplot" objects and passes them through a "pipe" that first generates the window, then organizes the plots and finally draws them One of the critical parts of the procedure is using plenv, which uses itself pladv and sets a basic viewport, as per the plplot documentation As it's hard to implement this without an example, I am trying to implement your solution on a regular plplot example first, but: I have some difficulty understanding your code, so I would really appreciate if you can clear some doubts:
I think you already understand the plstick documentation (see my response to your documentation questions below). And actually, the code is pretty clear as well. Aside from some scaling of characters and symbols (which I don't completely follow myself, but it works reasonably well), it is just a wrapper for plvpor but with a different argument list that is convenient to use when you are grouping plots close together on a single page. Please review <http://plplot.org/docbook-manual/plplot-html-5.15.0/viewport_window.html> to make sure you understand the distinctions between plotting surface, (sub-)page, and viewport, and the plwind and plbox calls that establish the window corresponding to the viewport and annotate the viewport. For example, you could make a 4 plots jammed together for a given page by plinit() pladv(0) # Upper left viewport on page plvpor(0., 0.5, 0.5, 1.0) plwind(...) ... plbox(...) ... # Lower left viewport on page plvpor(0., 0.5, 0.0, 0.5) plwind(...) ... plbox(...) ... # Upper right viewport on page plvpor(0.5, 1.0, 0.5, 1.0) plwind(...) ... plbox(...) ... # Lower right viewport on page plvpor(0.5, 1.0, 0.0, 0.5) plwind(...) ... plbox(...) ... But you can successively replace those plvpor calls by plstick(2,2,1,1, 0., 0., 0., 0.) plstick(2,2,2,1, 0., 0., 0., 0.) plstick(2,2,1,2, 0., 0., 0., 0.) plstick(2,2,2,2, 0., 0., 0., 0.) to achieve exactly the same results (aside from the character and symbol scaling that goes on inside plstick). Note, those first 2 arguments specify the size of the matrix of potential viewports, and the 3rd and 4 arguments specify the matrix element corresponding to the single viewport established by the plvpor call within plstick. The fundamental advantages of plstick over plvpor is those third and fourth arguments makes it easy to keep track of which part of the viewport matrix you are attempting to use, and you don't have to worry about keeping track of all the divisions and offsets to specify a particular element of the matrix. For example, to specify the (2, 3) viewport matrix element within a 3x7 matrix you just need to call plstick(3,7,2,3,....) Or you could call plvpor directly instead, but that case there would be a lot of arithmetic involved to generate the correct limits corresponding to that matrix element. Note plenv internally calls pladv, plvpor, plwind, and plbox with some simplifying assumptions so it should not be used for any situation that is complex in the slightest such as attempting to jam plot viewports (and corresponding windows) together on a single (sub-)page. So instead of plenv you must (as in the example above) call pladv once per (sub-)page followed by groups of plvpor (or plstick), plwind, and plbox calls that jam the viewports (and corresponding windows) together. If you want to take a look at a more complex but real-world example of using plstick, see <https://sourceforge.net/p/freeeos/freeeos/ci/master/tree/www/eos_papers/coulomb/coulomb_adjust.py>. This is the updated version of the Python script that generated the plot I attached last time. If you look at that plot, there are two columns and 3 rows for the viewport matrix that is used, but a complication is there is a gap between the two columns to leave room for the annotation of the right-most column. But specifying such a gap (and the space above and below each column) is handled with ease using the plstick spacing parameters.
- # Sets up a viewport such that xnum X ynum of them fit onto a # page. - I assume this sets the amount of plots that will fit in to a page X / Y distributed ?
Yes.
- Make the active viewport the one at column currentx and row # currenty, starting at the top left. - This sets where plots will start being drawn, starting at the top left ?
Yes. So I have confirmed you understand the documentation of plstick, and you have access to general documentation of the relationships between page, viewport, and window and two examples to work with. So I hope this information completely solves the issue for you. Alan __________________________ Alan W. Irwin Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.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 __________________________ _______________________________________________ Plplot-general mailing list Plplot-general@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-general