From: Eric F. <ef...@ha...> - 2014-09-28 19:15:46
|
On 2014/09/28, 8:22 AM, Thomas Caswell wrote: > On Sun, Sep 28, 2014 at 1:52 PM, Eric Firing <ef...@ha...> wrote: >> >> I don't understand your objection. In which cases do the returns depend on >> the arguments? "title" returns the title text object, regardless of whether >> there was an argument setting it to a new value. Same for "xlim". I >> haven't checked the whole list, but I expect this is the general pattern. > > > Sorry, I rarely use that part of the API, I apparently remember it > wrong. I thought they returned `None` in the case where you were > using them as setters. > >> But it does *not* take care of one of the two *big* problems I am talking about: >> the lack of automatic interactive plot updating when one wants to explicitly >> specify axes and figures in the plot call, regardless of whether this is done >> via plotting functions or methods. > > I would suggest using a function identical to the pyplot wrapper, but > just preserve the ax argument: > > def interactive_wrapper(func): > @functools.wraps(func) > def inner(ax, *args, **kwargs): > ret_list = func(ax, *args, **kwargs) > ax.figure.canvas.draw() > return ret_list > > return inner Yes, this could be done. But it would require: 1) the switch from methods to plot functions, which is a huge change; 2) having not 1, not 2, but 3 sets of plot functions: the first with the ax argument and no interactivity; the second with the ax argument and interactivity; and the third being the pyplot version. > > I think it is very important to maintain a way to use mpl without > having to involve pyplot and it's global state in anyway which is > useful for embedding. This needs a closer look. I don't see that my suggestions involve pyplot's global state any more than at present, or that they would in any way affect embedding. > >> There is one major difference in using methods instead of plotter functions, though: >> it allows subclassing. Whether this is ever used in practice, I don't know > > I think this only matters if you want to over-ride the behavior of the > plotting methods which I am going back and forth on if preventing this > is a good thing or not and if monkey-patching/clever importing is the > way around it. > I tend to think that monkey-patching is something to avoid, and that the goal should be simplicity and straightforwardness rather than cleverness. Eric |