在所有子图的顶部显示图例

时间:2015-09-14 16:32:56

标签: python matplotlib

我有matplotlib的1x3子图。 我试图在子图的顶部显示subplot的图例。但是,我只展示了最后一个。

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6],"c":[7,8,9]})
fig, axes = plt.subplots(nrows=1, ncols=3)
df.plot(ax=axes[0],legend=False)
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=2, mode="expand", borderaxespad=0.)
df.plot(ax=axes[1],legend=False)
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=2, mode="expand", borderaxespad=0.)
df.plot(ax=axes[2],legend=False)
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
           ncol=2, mode="expand", borderaxespad=0.)

enter image description here

如何在所有子图的顶部显示图例?

1 个答案:

答案 0 :(得分:4)

使用ax.legend(...)代替plt.legend

通常,最好避免混合pyplot和axes方法。事实上,我建议仅使用或多或少的plt.subplots()plt.show(),并在其他地方使用轴/数字方法。它可以更清楚地绘制哪些轴,以及图形与轴之间的操作。

举个例子:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({"a":[1,2,3],"b":[4,5,6],"c":[7,8,9]})

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 4))
for ax in axes:
    df.plot(ax=ax,legend=False)
    ax.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
              ncol=2, mode="expand", borderaxespad=0.)

# Make some room at the top for the legend...
fig.subplots_adjust(top=0.8)

plt.show()

enter image description here