Как я могу исправить положение легенды, даже если изменится фигура? - PullRequest
1 голос
/ 24 сентября 2019

Я хотел бы создать довольно много диаграмм, которые очень похожи на рисунок ниже.

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()

Picture 1

Фигуры в порядке, но я изо всех сил стараюсь расположить легенду и аннотацию, поскольку размер фигуры меняется.Используя figsize (7,2), легенда перемещается вверх и вправо, в то время как аннотация остается в том же положении: Picture 2

Вопрос: Как я могу исправитьположение легенды, даже когда изменится фигура?Для легенды я не нашел решения, похожего на использование textcoords = «точки осей», которое гарантирует, что аннотация останется на том же месте независимо от размера рисунка.

Я не нашел ни одногоРешения для легенды пока нет.Мне было интересно, сработает ли следующее или есть ли другие решения, о которых я пока не думал

  • Используя ax.legend (), пытаясь установить фиксированную точку относительно команды ax.annotate ()

  • Использование новой команды с такими же аргументами, как annotate («точки осей»)

  • Использование новых классов, таких как artist (),remove () и так далее, которые дают те же результаты, что и команда legend ()

Есть идеи, как решить эту проблему?Заранее благодарен за любую помощь!

С уважением

...