Поменяйте местами некоторые метки в легенде - matplotlib - PullRequest
0 голосов
/ 21 апреля 2020

Рассмотрим следующий пример:

import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure(figsize=(4,6))
axis = fig.add_subplot(111)
x = np.linspace(1,2,100)
axis.plot(x, x, label = "a")
axis.plot(x, x**2, label = "b")
axis.plot(x, x**3, label = "c")
axis.plot(x, x**4, label = "d")
axis.legend()

plt.show()

Существует ли простой способ поменять местами первый (a с синей линией) и последний объект (d с красной линией) без изменения порядка в код. Поэтому в легенде должен быть указан порядок (сверху вниз):

  • красная линия d
  • оранжевая линия b
  • зеленая линия c
  • синяя обработка

1 Ответ

2 голосов
/ 21 апреля 2020

Вы можете получить ручки и надписи легенды с помощью get_legend_handles_labels и сбросить их в указанном порядке:

import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure(figsize=(16,10))
axis = fig.add_subplot(111)
x = np.linspace(1,2,100)
axis.plot(x, x, label = "a")
axis.plot(x, x**2, label = "b")
axis.plot(x, x**3, label = "c")
axis.plot(x, x**4, label = "d")

axis.legend()
handles, labels = axis.get_legend_handles_labels()
axis.legend([handles[-1]] + handles[1:-1] + [handles[0]], 
            [labels[-1]] + labels[1:-1] + [labels[0]])

plt.show()

enter image description here

...