Легенда легенды в Matplotlib должна помочь нам отобразить имя изображения, соответствующее каждым данным, и позволить читателю лучше распознать вашу структуру данных.
Как показано на рисунке, часть, отмеченная красным, является легендой легенды.
в предыдущей статье«Функция рисования изображений» из серии MatplotlibПроцесс рисования и структурный анализ Matplotlib подробно описаны в книге, надеюсь, читатели смогут понять это первыми.
Затем последний код продолжает объяснять, как отображается легенда легенды и каковы общие черты.
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-3,3,50)
y1=2*x+1
y2=x**2
plt.figure(num=3,figsize=(8,5))
l1=plt.plot(x,y2)
l2=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
plt.legend(handles=[l1,l2],labels=['up','down'],loc='best')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim((-1,2))
plt.ylim((-2,3))
new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks)
plt.yticks([-2,-1.8,-1,1.22,3],
[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'])
ax=plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.show()
Структура изображений Matplotlib была тщательно нарисована в предыдущем разделе, и теперь пришло время просмотреть ее.
Заголовок — это заголовок изображения, Ось — это ось, Метка — это метка оси, Тик — это отметка деления, Метка деления — это аннотация в виде деления, а Легенда — это легенда.
Установить легенду Легенда
Здесь мы устанавливаем легенду легенды, как показано на рисунке выше, то есть вверху соответствует y = 2x + 1, это сплошная линия, цвет по умолчанию, вниз соответствует y = x^2^ , пунктирная линия, красный, и, наконец, вызовите метод легенды, чтобы установить некоторые стили. Вот и все.
# 设置 legend 图例
l1,=plt.plot(x,y1,label='linear line')
l2,=plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--',label='square line')
plt.legend()
Вызов легенды без аргументов автоматически получит дескриптор легенды и связанные с ней метки.Эта функция эквивалентна:
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels)
Для полного контроля над добавляемым дескриптором легенды обычно передайте соответствующий дескриптор непосредственно в легенду:
plt.legend(handles=[l1, l2])
В некоторых случаях нам нужно установить метки для легенды легенды.
plt.legend(handles=[l1, l2], labels=['up', 'down'])
местонахождение легенды
Положение легенды можно указать с помощью аргументов ключевого слова.loc
указано. bbox_to_anchor
Ключевые слова позволяют пользователю вручную управлять макетом легенды. Например, если вы хотите, чтобы легенда осей находилась в верхнем правом углу изображения, а не в углах осей, вам нужно только указать местоположение угла и систему координат для этого местоположения:
Когда мы указываем loc = 'upper right', легенда легенды будет отображаться в правом верхнем углу:
Вы также можете указать loc везде, где хотите:
plt.legend(handles=[l1, l2], labels=['up', 'down'], loc='lower right')
loc использует параметры
Целое число, строка или пара с плавающей запятой, по умолчанию «вверху справа».
Краткая справочная таблица общих параметров легенды
Keyword | Description |
---|---|
loc | Location code string, or tuple (see below) |
fontsize | the font size (used only if prop is not specified) |
prop | the font property |
markerscale | the relative size of legend markers vs. original |
markerfirst | If True (default), marker is to left of the label |
numpoints | the number of points in the legend for line |
scatterpoints | he number of points in the legend for scatter plot |
scatteroffsets | a list of yoffsets for scatter symbols in legend |
frameon | If True, draw the legend on a patch (frame) |
shadow | If True, draw a shadow behind legend |
framealpha | Transparency of the frame |
edgecolor | Frame edgecolor |
facecolor | Frame facecolor |
fancybox | If True, draw the frame with a round fancybox |
ncol | number of columns |
borderpad | the fractional whitespace inside the legend border |
handlelength | the length of the legend hendles |
handletextpad | The pad between the legend handle and text |
borderaxespad | the pad between the axes and legend border |
columnspacing | the spacing between columns |
title | the legend title |
bbox_to_anchor | the bbox that the legend will be anchored |
bbox_tansform | the transform for the bbox,transAxes if None |
процессор легенды
Чтобы создать запись легенды, укажите дескриптор в качестве параметра для соответствующегоHandlerBase
Подкласс. Выбор подкласса обработчика
Следующие правила определяют:
- использовать
handler_map
Обновление значения в ключевом словеget_legend_handler_map()
. - Проверьте, создан ли дескриптор заново
handler_map
середина. - Проверьте, находится ли тип дескриптора во вновь созданном
handler_map
середина. - Проверьте ручку
mro
Является ли какой-либо из типов во вновь созданномhandler_map
середина.
В полноте эта логика в основном вget_legend_handler()
реализовано в.
Для простоты выберемmatplotlib.legend_handler.HandlerLine2D
, он принимаетnumpoints
параметры (для удобства заметимnumpoints
даlegend()
ключевое слово в функции). Тогда у нас может быть словарь экземпляров в качестве ключейhandler_map
перейти кlegend
.
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerLine2D
# 设置legend图例
l1,=plt.plot(x,y1,marker = 'o',label='linear line')
l2,=plt.plot(x,y2,color='red',linewidth=1.0,marker = 'o',label='square line')
plt.legend(handler_map = {l1:HandlerLine2D(numpoints=4)},handles=[l1, l2], labels=['up', 'down'], loc='lower right')
Как вы видете,up
Теперь есть 4 маркера,down
Их два (по умолчанию).