Добавить цвет фона только к одному компоненту легенды в matplotlib - PullRequest
0 голосов
/ 17 октября 2018

Я знаю, как создавать сюжеты в matplotlib, и я знаю, как добавить легенду, такую ​​как мы в этом примере:

enter image description here

Iхотите изменить легенду и показать цвет фона только для одной конкретной линии (или компонента) легенды.Принимая пример изображения, я хотел бы, чтобы пунктирная красная линия была показана на желтом фоне (я знаю, что это не лучший выбор, я просто использую цвета для иллюстрации).

Я знаюкак добавить фон ко всему полю легенды, например:

x = arange(0.,10,0.1)
a = cos(x)
b = sin(x)
c = exp(x/10)
d = exp(-x/10)
la = plt.plot(x,a,'b-',label='cosine')
lb = plt.plot(x,b,'r--',label='sine')
lc = plt.plot(x,c,'gx',label='exp(+x)')
ld = plt.plot(x,d,'y-', linewidth = 5,label='exp(-x)')

# Add the background to the legend
lege = plt.legend(loc="upper left", prop={'size':8})
lege.get_frame().set_facecolor('#FFFF00')

Но что, если я хочу, чтобы фон выделил только одну конкретную строку / компонент?

1 Ответ

0 голосов
/ 17 октября 2018

Способ сделать это - манипулировать ручками легенды.Если я добавлю следующий код в ваш пример, я смогу заставить его работать:

import matplotlib.patches as mpatches
sp = plt.gca()

# Call get_legend_handles_labels()
# this returns both the handles (the lines on the left side of the legend)
# And the labels: the text in the legend
handles, labels = sp.get_legend_handles_labels()

# Let's create a yellow rectangle
yellow_patch = mpatches.Patch(color='yellow')

# Replace the second handle (for the red line)
# With a tuple; this first draws the yellow patch and then the red line
handles[1] = (yellow_patch, handles[1])
plt.legend(handles, labels)

enter image description here Для получения дополнительной информации см. https://matplotlib.org/users/legend_guide.html

...