如何返回MatPlotLib图及其对应的图例

时间:2017-11-25 19:12:16

标签: python python-3.x matplotlib

我正在尝试定义一个函数,该函数返回具有特定网格,样式,宽度和其他属性的预先设置的图形。然而,当我返回无花果及其轴时,传说就不见了。这是一个简化的例子:

def getfig():
    plt.style.use('default')
    fig, axs = plt.subplots(1, 1, figsize=(1,1), sharey=False)

    if issubclass(type(axs),mpl.axes.SubplotBase):
        axs=[axs]

    for ax in axs:
        ax.grid(color='grey', axis='both', linestyle='-.', linewidth=0.4)
        ax.legend(loc=9, bbox_to_anchor=(0.5, -0.3), ncol=2)

    return fig,axs

fig,axs=getfig()
axs[0].plot(range(10), label="label")

enter image description here

我错过了什么?

谢谢!

更新

这是我到目前为止所使用的内容,但我认为应该有一种方法可以强制所有与图形相关的未来图例具有某种风格。

def fig_new(rows=1,columns=1,figsize=(1,1)):
    plt.style.use('default')
    fig, axs = plt.subplots(rows,columns, figsize=figsize, sharey=False)

    if issubclass(type(axs),mpl.axes.SubplotBase):
        axs=[axs]

    for ax in axs:
        ax.grid(color='grey', axis='both', linestyle='-.', linewidth=0.4)

    return fig,axs

def fig_leg(fig):
    for ax  in fig.get_axes():
        ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.3), ncol=5)

fig,axs=fig_new()
axs[0].plot(range(10), label="label")
fig_leg(fig) 

1 个答案:

答案 0 :(得分:0)

您需要在之后调用图例将具有标签的艺术家绘制到轴上。 一个选项是让函数返回之后用于图例的参数。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

def getfig():
    plt.style.use('default')
    fig, axs = plt.subplots(1, 1, figsize=(1,1), sharey=False)

    if issubclass(type(axs),mpl.axes.SubplotBase):
        axs=np.array([axs])

    legendkw = []
    for ax in axs:
        ax.grid(color='grey', axis='both', linestyle='-.', linewidth=0.4)
        legendkw.append(dict(loc=9, bbox_to_anchor=(0.5, -0.3), ncol=2))

    return fig,axs,legendkw

fig,axs,kw=getfig()
axs[0].plot(range(10), label="label")
for i,ax in enumerate(axs.flat):
    ax.legend(**kw[i])
plt.show()