Python 即使图形大小发生变化,如何确定图例的位置?

Python 即使图形大小发生变化,如何确定图例的位置?,python,matplotlib,position,legend,figure,Python,Matplotlib,Position,Legend,Figure,我想创建一些与下图非常相似的图表 import matplotlib.pyplot as plt import numpy as np labels = ['2015', '2016', '2017', '2018', '2019'] group_a = [20, 34, 30, 35, 27] group_b = [25, 32, 34, 20, 25] group_c = [10, 14, 10, 20, 17] group_d = [16, 4, 8, 15, 18] x = np.

我想创建一些与下图非常相似的图表

import matplotlib.pyplot as plt
import numpy as np


labels = ['2015', '2016', '2017', '2018', '2019']
group_a = [20, 34, 30, 35, 27]
group_b = [25, 32, 34, 20, 25]
group_c = [10, 14, 10, 20, 17]
group_d = [16, 4, 8, 15, 18]

x = np.arange(len(labels))
width = 0.2

fig, ax = plt.subplots(figsize=(14, 7))

ax.bar(x - width/2, group_a, width, label='Group 1')
ax.bar(x + width/2, group_b, width, label='Group 2')
ax.bar(x + width/2 +width, group_c, width, label='Group 3')
ax.bar(x - width/2 -width, group_d, width, label='Group 4')

ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend(loc='upper left',
          bbox_to_anchor=(0.075, -0.075),
          fancybox=True,
          ncol=2,
          fontsize=8,
          frameon=False)
ax.annotate('Categorie 1\nCategorie 2',
            xy=(0, 0),
            xytext=(0, -55),
            linespacing=1.7,
            Fontsize=8,
            textcoords='axes points')

fig.tight_layout()

plt.show()

这些图形非常精细,但我很难定位图例和注释,因为图形大小不同。使用figsize(7,2),图例向上和向右移动,而注释保持在同一位置:

问题: 即使图形大小发生变化,如何确定图例的位置?对于图例,我没有找到类似于使用textcoords=“axes points”的解决方案,它可以确保注释保持在相同的位置,而不管图形的大小

我还没有找到任何解决传奇的办法。我想知道下面的方法是否可行,或者是否还有其他我还没有想到的解决方案

  • 使用ax.legend()尝试设置与命令ax.annotate()相关的固定点

  • 使用具有类似参数的新命令,如annotate(“轴点”)

  • 使用新类,如artist()、remove()等,它们提供与命令legend()相同的结果

有什么办法解决这个问题吗?提前感谢您的帮助


关于

与“轴点”类似的内容,您可能会冒文本在图形之外的风险。您是否总是使用
savefig(…,bbox_inches=“tight”)
方法进行保存?如果您想确保图例或文本始终在图形内部,请检查。我已经尝试过这个方法。重要的是将图例固定在图形外部,并固定在与图1完全相同的位置。使用类似“轴点”的方式,您可能会冒文本位于图形外部的风险。是否始终使用
savefig(…,bbox_inches=“tight”)
方法进行保存?如果要确保图例或文本始终位于图形内部,检查,我已经试过了。重要的是将图例固定在图外,并与图1完全相同的位置。