Подтвердить что ты не робот

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

4b9b3361

Ответ 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)