«Легенда-легенда» серии Matplotlib

искусственный интеллект программист алгоритм

Легенда легенды в 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Их два (по умолчанию).