Создайте легенду с помощью pandas и matplotlib.pyplot

Это моя первая попытка построения с помощью python, и у меня возникают проблемы с созданием легенды.

Это мой импорт:

import matplotlib.pyplot as plt
import pandas

Я загружаю свои данные следующим образом:

data = pandas.read_csv( 'data/output/limits.dat', sep=r"\s+", encoding = 'utf-8' )

и постройте его так:

axdata = data.plot( label = '$|U|^{2}$' , x = 'mass', y = 'U2',
                    style = '-s', markeredgecolor = 'none' )

По-видимому, axdata теперь является AxesSubplot.

Теперь я хочу создать легенду, описанную здесь следующим образом:

plt.legend( (line1), ('label1') )

но я не знаю, как извлечь объект line из AxesSubplot

plt.legend() в своих собственных работах, но я хочу, чтобы некоторые из моих строк отображались в легенде. Правильно ли это? Есть ли другая команда, которую я могу использовать здесь?

ИЗМЕНИТЬ

Например, если я попробую:

plt.legend( [axdata], ['U2'])

Я получаю сообщение об ошибке:

~/.virtualenvs/science/lib/python3.3/site-packages/matplotlib/legend.py:613:
UserWarning: Legend does not support Axes(0.125,0.1;0.775x0.8)
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

(str(orig_handle),))

Я еще не определил, что такое прокси-исполнитель, но я думаю, что это инструмент, когда вы используете графический объект, отличный от объекта по умолчанию, который, как я думал, вероятно, не был здесь, потому что я пытаюсь создать нормальный график matlibplot. Слова "не-дефолт" и "нормальный" являются моими - я не уверен, что они еще означают.

ДРУГОЙ РЕДАКТИРОВАНИЕ: (потому что я неправильно прочитал комментарий)

plt.legend() сам по себе ничего не выводит на консоль, но на полученном графике теперь есть легенда, автоматически генерируемая из построенных данных.

Ответ 1

Я думаю, что вы хотите показать легенду для подмножества строк на вашем сюжете. Это должно сделать это:

df = pd.DataFrame(np.random.randn(400, 4), columns=['one', 'two', 'three', 'four'])
ax1 = df.cumsum().plot()
lines, labels = ax1.get_legend_handles_labels()
ax1.legend(lines[:2], labels[:2], loc='best')  # legend for first two lines only

Предоставление

enter image description here