octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Improvements in subplot


From: bpabbott
Subject: Re: Improvements in subplot
Date: Wed, 16 Mar 2011 14:18:23 +0000 (GMT)

On Mar 16, 2011, at 05:39 AM, logari81 <address@hidden> wrote:

On Thu, 2011-03-10 at 20:37 +0100, Konstantinos Poulios wrote:
> On Sun, Mar 6, 2011 at 8:16 PM, Ben Abbott <address@hidden> wrote:
> > On Mar 6, 2011, at 1:27 PM, logari81 wrote:
> >
> >> On Fri, 2011-03-04 at 21:10 +0000, bpabbott wrote:
> >>> On Mar 04, 2011, at 05:57 AM, Konstantinos Poulios
> >>> <address@hidden> wrote:
> >>>
> >>>> Hi all,
> >>>>
> >>>> I have implemented an idea that I had about subplot. You can try it
> >>>> by
> >>>> using the attached m-files.
> >>>>
> >>>> It is not finished yet, so expect some issues (e.g. when subplots do
> >>>> not have any titles or axes labels)
> >>>>
> >>>> However the basic concept, seems to work quite well.
> >>>>
> >>>> Some points that I could mention:
> >>>>
> >>>> 1. For both gnuplot and octave if the align_axes option is not
> >>>> present, "activepositionproperty" is set to "position". So we
> >>>> decline
> >>>> from ML, but I think this makes sense because MLs' subplots are not
> >>>> perfect either.
> >>>>
> >>>> 2. Only for fltk, I used listeners in order to notify all subplots
> >>>> when tightinset of one of them changes.
> >>>>
> >>>> 3. Only for fltk, I used the looseinset property in order to align
> >>>> axes in column rows and columns. The result is quite neat, see the
> >>>> attached png's. This is the reason for using
> >>>> "activepositionproperty"="position", otherwise looseinset would have
> >>>> no effect.
> >>>>
> >>>> 4. I have some concerns about the performance since there is a
> >>>> significant number of listeners involved. On my pc however it seems
> >>>> to
> >>>> perform quite well:
> >>>> ||octave:40> kostas_subplot_test
> >>>> ||1. Drawing a grid of 3x3 plot: 0.09 secs
> >>>> ||2. Add some data to the plots: 0.33 secs
> >>>> ||3. Add titles: 0.35 secs
> >>>> ||4. Add axes labels: 0.79 secs
> >>>>
> >>>> 5. For the moment this implementation works only for normalized
> >>>> units,
> >>>> so I have to add some units conversion inside a protected context.
> >>>> It
> >>>> is in my TODO list.
> >>>>
> >>>> I would like to have some comments and testing on this solution.
> >>>>
> >>>> @Ben, could you test the gnuplot part, which I am not very familiar
> >>>> with?
> >>>>
> >>>> Best regards
> >>>>
> >>>> Kostas
> >>>
> >>> I ran the subplot demos. Everything there looks ok to me. I'll run all
> >>> the demos over the week end and report back on the results.
> >>>
> >>>
> >>> Ben
> >>
> >> Hi Ben,
> >>
> >> actually I would like to send you an improved version but there is an
> >> issue that I can't solve:
> >>
> >> I add the listeners for each subplot as I described in my previous mail
> >> and everything works fine, until I plot something on the subplot axes.
> >> The plot command calls "set_defaults" which in turn removes all
> >> listeners.
> >>
> >> How could I make the listeners persistent? Do you have any clue?
> >>
> >> BR
> >>
> >> Kostas
> >
> > Unfortunately, much of the c++ side remains a mystery for me. Looking at graphics.cc:set_defaults, I don't see where the listeners are being deleted.
> >
> > I'd expect the listeners to remain in place, unless (1) they are removed by dellistener(), or (2) the axis object is deleted.
> >
> > If anyone else has some insight into what set_defaults is doing, the script below ...
> >
> > clf
> > axis;
> > fun = @() printf ("listener: active property = %s\n", get (gca, "activepositionproperty"));
> > addlistener (gca, "activepositionproperty", fun)
> > set (gca, "activepositionproperty", "position")
> > x = 0:0.1:10;
> > plot (x, sin(x));
> > get (gca, "activepositionproperty")
> > set (gca, "activepositionproperty", "outerposition")
> > get (gca, "activepositionproperty")
> >
> > ... should produce (I think?) ...
> >
> > listener: active property = position
> > ans = position
> > listener: active property = outerposition
> > ans = outerposition
> >
> > ... but because the listerner is deleted (accidentally?) when "plot(x,sin(x))" is run, I get ....
> >
> > listener: active property = position
> > ans = position
> > ans = outerposition
> >
> > There no need to apply Kosta's patch to test this behavior.
> >
> > Ben
> >
>
> After having pushed the changes for supporting persistent listeners
> you can test the attached subplot version.
>
> Regards
>
> Kostas

Ben, could you test this changes now that we have circumvented the
issues with the crashes? If there are no regressions, performance issues
or other concerns, I would like to push this change.

Kostas
 
I noticed one regression and a minor problem.

(1) For "demo axis 1" the (2,2,1) and (2,2,2) subplots are missing for the gnuplot backend.

(2) For subplots with multiple columns the plots are crowded to the left. "demo axis 2" and "demo axis 4" illustrate this. I haven't looked at the detail yet, but this may be due to how the outerposition property is set by the subplot() function.

Ben


reply via email to

[Prev in Thread] Current Thread [Next in Thread]