如何同时完成这两项操作:调整子图的间距并将图例放在图的外部?

时间:2019-03-23 15:55:42

标签: python matplotlib

我有9个matplotlib子图排列在一个网格中。我正在尝试做两个简单的事情:(1)调整子图间距以减少空白,(2)将图例放在图外。就个人而言,两件事都非常容易。在一起,它们不起作用:如果我使用bbox_to_achnor =(...)将图例放置在子图之外,则子图间距变乱了,subplots_adjust(...)不再起作用。

UPD:这适用于狭窄的间距:

fig, axes = plt.subplots(3, 3)

plt.subplot(331)
# plot something on every subplot
plt.subplot(339)
# plot something here too

plt.subplots_adjust(wspace=0, hspace=0)
plt.tight_layout()
plt.savefig("blabla.pdf", format="pdf")

使用此代码,所有数字都受到挤压:

fig, axes = plt.subplots(3, 3)

plt.subplot(331)
# plot something on every subplot
plt.subplot(339)
# plot something here too

# add outside legend to the first plot
plt.subplot(331)
lgd = plt.legend(ncol=1, loc=2, prop={'size': 10}, bbox_to_anchor=4.2, 0.2))

plt.subplots_adjust(wspace=0, hspace=0)
plt.tight_layout()
plt.savefig("blabla.pdf", format="pdf", bbox_inches="tight", bbox_extra_artists=(lgd,))

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您将图例与图形对象fig一起使用,则说明一切正常。当前,您将其与最后一个plt对象相对应的最后一个339对象使用。使用fig4.2不需要大的bbox_to_anchor偏移量。 1.1或1.2之类的东西应该可以正常工作

lgd = fig.legend(ncol=1, loc=2, prop={'size': 10}, bbox_to_anchor=(1.2, 0.2))