I have a function that wraps pyplot.plt
so I can quickly create graphs with oft-used defaults:
def plot_signal(time, signal, title='', xlab='', ylab='',line_width=1, alpha=1, color='k',subplots=False, show_grid=True, fig_size=(10, 5)):# Skipping a lot of other complexity heref, axarr = plt.subplots(figsize=fig_size)axarr.plot(time, signal, linewidth=line_width,alpha=alpha, color=color)axarr.set_xlim(min(time), max(time))axarr.set_xlabel(xlab)axarr.set_ylabel(ylab)axarr.grid(show_grid)plt.suptitle(title, size=16)plt.show()
However, there are times where I'd want to be able to return the plot so I can manually add/edit things for a specific graph. For example, I want to be able to change the axis labels, or add a second line to the plot after calling the function:
import numpy as npx = np.random.rand(100)
y = np.random.rand(100)plot = plot_signal(np.arange(len(x)), x)plot.plt(y, 'r')
plot.show()
I've seen a few questions on this (How to return a matplotlib.figure.Figure object from Pandas plot function? and AttributeError: 'Figure' object has no attribute 'plot') and as a result I've tried adding the following to the end of the function:
return axarr
return axarr.get_figure()
return plt.axes()
However, they all return a similar error: AttributeError: 'AxesSubplot' object has no attribute 'plt'
Whats the correct way to return a plot object so it can be edited later?