2015-09-07 3 views
1

Я пытаюсь создать пользовательскую легенду, используя matplotlib. example in the matplotlib documentation не работает над моей настройкой. И это не следует.Пользовательская легенда для matplotlib не работает

from matplotlib import pyplot as plt 
import matplotlib.patches as mpatches 

fig, ax = plt.subplots() 

patch1 = mpatches.Patch(color='#a6cee3', label='Blue') 
patch2 = mpatches.Patch(color='#1f78b4', label='Bluerish') 
patch3 = mpatches.Patch(color='#33a02c', label='Greener') 
patch4 = mpatches.Patch(color='#fdbf6f', label='Kind of orange') 
patch5 = mpatches.Patch(color='#ff7f00', label='Orange') 

all_handles = (patch1, patch2, patch3, patch4, patch5) 

leg = ax.legend(all_handles) 

ax.add_artist(leg) 
plt.show() 

Как я могу заставить его произвести желаемую легенду?

Я использую Mac OSX 10.10.3, Python 2.7.6, Matplotlib 1.3.1.

ответ

2

Вы должны установить handles аргумент ax.legend явно:

leg = ax.legend(handles=all_handles) 

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

enter image description here

+0

Это дает мне 'AttributeError: объект 'NoneType' не имеет атрибута«set_axes''. –

+0

Я не получаю никаких ошибок, но это все равно не работает для меня, не вызывая после этого 'plt.draw'. @ P-robot, в какой функции эта ошибка? – askewchan

+0

Из 'ax.legend()', неправильные дорожки вызова 'ax.add_artist (leg)', который дает ошибку из '/Library/Python/2.7/site-packages/matplotlib-override/matplotlib/axes.pyc в add_artist (self, a) 'в следующей строке (1454)' a.set_axes (self) '. Это помогает? –

Смежные вопросы