考虑以下示例:
当我从
这个问题在各种后端下都可以复现。我没有收到任何警告或错误。我正在使用matplotlib版本
import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
x = np.linspace(0, 10, 100)
y = 2*x + 0.5
plt.figure(figsize=(6, 4))
gs = gridspec.GridSpec(2, 2)
plt.subplot(gs[0, 0])
plt.plot(x, y, "o")
plt.subplot(gs[0, 1])
plt.plot(x, y, "o")
plt.subplot(gs[1, :])
plt.plot(x, y, "o", label="test")
plt.legend(loc="upper center", bbox_to_anchor=(0.5, 2.7))
plt.subplot(gs[2, :])
plt.plot(x, y, "o")
plt.tight_layout()
plt.show()
当我从
plt.legend
中删除bbox_to_anchor
时,上述代码应该生成类似于这样的结果:
但是,当我使用bbox_to_anchor
将图例放在子图之外时(就像上面的代码中一样),子图被压缩了:
bbox_to_anchor
和tight_layout()
之间存在冲突(如果您从上面的代码中删除其中一个,就会得到一些合理的结果)。我做错了什么吗,还是这是已知/预期的行为?这个问题在各种后端下都可以复现。我没有收到任何警告或错误。我正在使用matplotlib版本
2.2.2
。
2.7
的目的是什么?您希望将图例放在哪里? - ImportanceOfBeingErnest2.7
应将图例定位在底部子图上方(大约在图形顶部附近)。该值是我在创建出现问题的图时与subplots_adjust
相结合的遗留物。在这个最简化的示例中,我还没有测试一个良好布局的正确值应该是多少(可以是2.3
或其他),但不同的值给出相同的结果(即压缩子图)。 - MPA