我有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.)
如何在所有子图的顶部显示图例?
答案 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()