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 np

x = 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

回到顶部