Создайте легенду с помощью 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]()