Pandas бар с конкретными цветами и расположением легенд?
У меня есть pandas DataFrame
, и я хочу построить гистограмму, содержащую легенду.
import pylab as pl
from pandas import *
x = DataFrame({"Alpha": Series({1: 1, 2: 3, 3:2.5}), "Beta": Series({1: 2, 2: 2, 3:3.5})})
Если я вызываю график напрямую, тогда он помещает легенду выше графика:
x.plot(kind="bar")
Если я вернусь к легенде в сюжете и попытаюсь добавить ее позже, то она не сохранит цвета, связанные с двумя столбцами в DataFrame (см. ниже):
x.plot(kind="bar", legend=False)
l = pl.legend(('Alpha','Beta'), loc='best')
Какой правильный способ включить легенду в график matplotlib из pandas DataFrame?
![enter image description here]()
Ответы
Ответ 1
Если вы хотите добавить легенду вручную, вам нужно задать подзаголовок для элементов строчки:
In [17]: ax = x.plot(kind='bar', legend=False)
In [18]: patches, labels = ax.get_legend_handles_labels()
In [19]: ax.legend(patches, labels, loc='best')
Out[19]: <matplotlib.legend.Legend at 0x10b292ad0>
Кроме того, plt.legend(loc='best')
или ax.legend(loc='best')
должны "работать", потому что уже есть "ссылки" на патч-диаграммы, установленные при создании графика, поэтому вам не нужно передавать список осей метки.
Я не уверен, что используемая версия pandas возвращает дескриптор подзаголовка (ax = ...
), но я уверен, что 0.7.3. Вы всегда можете получить ссылку на него с помощью plt.gca()
.
Ответ 2
Самый краткий путь:
x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))
или вообще
x.plot(kind="bar").legend(*args, **kwargs)