From 188125e5ed65c591ae60d3c0e189d93576cbf668 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Fri, 22 Nov 2013 02:01:33 -0600 Subject: [PATCH 1/2] super rough first pass --- lib/matplotlib/_pyplot_ng.py | 116 +++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 lib/matplotlib/_pyplot_ng.py diff --git a/lib/matplotlib/_pyplot_ng.py b/lib/matplotlib/_pyplot_ng.py new file mode 100644 index 000000000000..90c5c1f54c8a --- /dev/null +++ b/lib/matplotlib/_pyplot_ng.py @@ -0,0 +1,116 @@ +import matplotlib.pyplot as plt +from functools import wraps + +Axes = matplotlib.axes.Axes +Figure = matplotlib.figure.Figure + +WRAP_WITH_HOLD = set(( + 'acorr', + 'angle_spectrum', + 'arrow', + 'axhline', + 'axhspan', + 'axvline', + 'axvspan', + 'bar', + 'barh', + 'broken_barh', + 'boxplot', + 'cohere', + 'clabel', + 'contour', + 'contourf', + 'csd', + 'errorbar', + 'eventplot', + 'fill', + 'fill_between', + 'fill_betweenx', + 'hexbin', + 'hist', + 'hist2d', + 'hlines', + 'imshow', + 'loglog', + 'magnitude_spectrum', + 'pcolor', + 'pcolormesh', + 'phase_spectrum', + 'pie', + 'plot', + 'plot_date', + 'psd', + 'quiver', + 'quiverkey', + 'scatter', + 'semilogx', + 'semilogy', + 'specgram', + 'stackplot', + 'stem', + 'step', + 'streamplot', + 'tricontour', + 'tricontourf', + 'tripcolor', + 'triplot', + 'vlines', + 'xcorr', + 'barbs', + )) + + +def gca_wrapper(key): + ax = plt.gca() + f = getattr(ax, key) + @wraps(f) + def inner(*args, **kwargs): + ret = f(*args, **kwargs) + plt.draw_if_interactive() + return ret + + return inner + + +def gca_wrapper_hold(key): + ax = plt.gca() + f = getattr(ax, key) + @wraps(f) + def inner(*args, hold=None, **kwargs): + washold = ax.ishold() + if hold is not None: + ax.hold(hold) + try: + ret = f(*args, **kwargs) + plt.draw_if_interactive() + finally: + ax.hold(washold) + + return ret + + return inner + + +def gcf_wrapper(key): + fig = plt.gcf() + f = getattr(fig, key) + @wraps(f) + def inner(*args, **kwargs): + ret = f(*args, **kwargs) + plt.draw_if_interactive() + return ret + + return inner + + +class pyplotNG(object): + + def __getattr__(self, key): + if hasattr(Axes, key): + if key in WRAP_WITH_HOLD: + return gca_wrapper_hold(key) + return gca_wrapper(key) + elif hasattr(Figure, key): + return gcf_wrapper(key) + else: + return getattr(plt, key) From e9a7174fe5a825e44dd2645f30df04d7809ccdfc Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Fri, 29 Nov 2013 00:36:25 -0600 Subject: [PATCH 2/2] fixed imports fixed hold handling --- lib/matplotlib/_pyplot_ng.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/_pyplot_ng.py b/lib/matplotlib/_pyplot_ng.py index 90c5c1f54c8a..4150f56e05c7 100644 --- a/lib/matplotlib/_pyplot_ng.py +++ b/lib/matplotlib/_pyplot_ng.py @@ -1,6 +1,8 @@ -import matplotlib.pyplot as plt from functools import wraps +import matplotlib.pyplot as plt +import matplotlib + Axes = matplotlib.axes.Axes Figure = matplotlib.figure.Figure @@ -63,6 +65,7 @@ def gca_wrapper(key): ax = plt.gca() f = getattr(ax, key) + @wraps(f) def inner(*args, **kwargs): ret = f(*args, **kwargs) @@ -75,8 +78,10 @@ def inner(*args, **kwargs): def gca_wrapper_hold(key): ax = plt.gca() f = getattr(ax, key) + @wraps(f) - def inner(*args, hold=None, **kwargs): + def inner(*args, **kwargs): + hold = kwargs.pop('hold', None) washold = ax.ishold() if hold is not None: ax.hold(hold) @@ -94,6 +99,7 @@ def inner(*args, hold=None, **kwargs): def gcf_wrapper(key): fig = plt.gcf() f = getattr(fig, key) + @wraps(f) def inner(*args, **kwargs): ret = f(*args, **kwargs) @@ -114,3 +120,25 @@ def __getattr__(self, key): return gcf_wrapper(key) else: return getattr(plt, key) + + +def set_defaults(cls, key, new_defaults): + if hasattr(cls, '_orig_' + key): + orig_fun = getattr(Axes, '_orig_' + key) + else: + orig_fun = getattr(cls, key) + setattr(cls, '_orig_' + key, orig_fun) + + @wraps(orig_fun) + def wrapper(*args, **kwargs): + for k, v in new_defaults.iteritems(): + if k not in kwargs: + kwargs[k] = v + return orig_fun(*args, **kwargs) + + setattr(cls, key, wrapper) + + +def reset_defaults(cls, key): + if hasattr(cls, '_orig_' + key): + setattr(cls, key, getattr(Axes, '_orig_' + key))