One of the biggest causes of controversy in mpl, and of difficulty in teaching and learning mpl, is the divide between pyplot and the rest of the library. There are at least two aspects:
1) plt.title() versus ax.set_title(), etc; that is, all the clunky getters and setters on the OO side. JDH used to note that they were a side-effect of his C++ heritage, and that he probably wouldn't have used them if he had had more Python experience when he started mpl. 2) For interactive use, such as in the ipython console, one really wants pyplot's draw_if_interactive() functionality; one doesn't want to have to type explicit plt.draw() commands. Worse, plt.draw() operates on the current figure, which might not be the figure that one just updated with "ax2.set_title('the other plot')". I think that both of these speed bumps can be removed fairly easily, in an entirely backwards-compatible way. The first is just a matter of propagating some shorter-form pyplot function names back to Axes and Figure. This idea is mentioned at the end of MEP 13, as an alternative to properties. The second requires accepting some behavior in the Axes and Figure classes that is conditional on the backend and the interactive state. I think it would look *roughly* like this: Add a method to Figure: def draw_if_interactive(): if not is_interactive: return if not isinstance(self.canvas, interactive_canvases): return self.canvas.draw() Append this method to suitable Figure methods such as suptitle(). Add a method to Axes: def draw_if_interactive(): self.figure.draw_if_interactive() Append this method to suitable Axes methods--all those that execute changes, or at least those with corresponding pyplot functions. Some additional logic (either a kwarg, or temporary manipulation of the "interactive" flag, or of an Axes instance flag) would be needed to block the drawing at intermediate stages--e.g., when boxplot is drawing all its bits and pieces. After these changes, the pyplot functions could be simplified; they would not need their own draw_if_interactive calls. Am I missing some major impediment? If not, I think this set of changes would make it much easier to use and teach the OO interface, with pyplot still being used where it is most helpful, such as in the subplots() call. Eric ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk _______________________________________________ Matplotlib-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/matplotlib-devel