Matplotlib返回绘图对象
我有一个自动包装的函数,pyplot.plt
因此我可以使用经常使用的默认值快速创建图形:
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 here
f, 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()
但是,有时候我希望能够返回该图,因此我可以手动添加/编辑特定图形的内容。例如,我希望能够更改轴标签,或在调用函数后在绘图中添加第二条线:
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()
我已经看到了一些问题(如何从Pandas绘图函数返回matplotlib.figure.Figure对象?以及AttributeError:’Figure’对象没有属性’plot’),因此,我尝试添加以下内容到函数末尾:
return axarr
return axarr.get_figure()
return plt.axes()
但是,它们都返回类似的错误: AttributeError: 'AxesSubplot' object has no attribute 'plt'
返回绘图对象以便以后可以编辑的正确方法是什么?
回答:
我认为该错误是不言自明的。没有pyplot.plt
或类似的东西。plt
是导入时pyplot的准标准缩写形式,即import
matplotlib.pyplot as plt。
关于这个问题,第一种方法return axarr
是最通用的方法。您将得到一个轴或一组轴,并可以绘制到轴上。
该代码可能看起来像
def plot_signal(x,y, ..., **kwargs): # Skipping a lot of other complexity her
f, ax = plt.subplots(figsize=fig_size)
ax.plot(x,y, ...)
# further stuff
return ax
ax = plot_signal(x,y, ...)
ax.plot(x2, y2, ...)
plt.show()
以上是 Matplotlib返回绘图对象 的全部内容, 来源链接: utcz.com/qa/399273.html