Рубрики
Без рубрики

Matplotlib Legend – полезное иллюстрированное руководство

Учитесь добавлять легенду на любой участок в Matplotlib, выберите его местоположение, измените его размер и выберите его цвет [+ бонусное видео]

Автор оригинала: Adam Murphy.

Вы нанесли некоторые данные в Матплотлиб Но вы не знаете, какие данные показывают, что? Пришло время для легенды!

Как добавить легенду в библиотеке Python’s Matplotlib?

  • Метить это с метка Аргумент ключевых слов в вашем методе сюжета.
  • Перед PLT.Show () , вызов PLT.LEGEND () Ваш сюжет будет отображаться с легендой.

Вот минимальный пример:

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [1, 4, 9], label='squares')
plt.plot([1, 2, 3], [1, 8, 27], label='cubes')

plt.legend()
plt.show()

В следующем видео я возглав вас через статью, шаг за шагом.

Красивее пример

# Import necessary modules
import matplotlib.pyplot as plt
import numpy as np

# Optional: Use seaborn style as it looks nicer than matplotlib's default
import seaborn as sns; sns.set()

# Generate data
vals = np.array([0, 1, 2, 3, 4])

# Plot and label
plt.plot(vals, label='vals')

plt.legend()
plt.show()

Если вы поступите и маркируете несколько строк, легенда будет содержать несколько записей.

plt.plot(vals, label='Linear')
plt.plot(vals**2, label='Squared')
plt.plot(vals**0.5, label='Square Root')

plt.legend()
plt.show()

Вы можете объединить различные типы сюжета – разброса, линии, гистограммы и т. Д. – Но вам, возможно, придется указать цвета вручную, если вы.

import random

# Set seed to reproduce results
random.seed(1)

# Generate random data
x = [random.random() for _ in range(100)]
y = [random.random() for _ in range(100)]

# Scatter plot
plt.scatter(x, y, label='Data')

# Red line plot acting as the 'line of best fit'
plt.plot([0, 1], label='Best Fit', c='r')
plt.legend()
plt.show()

В этом примере я сначала Сгенерированные случайные данные Прежде чем сделать разброс с нее. Затем я нарисовал линию сюжета сверху, чтобы действовать в качестве строки лучшей посадки (обратите внимание, что это всего лишь пример и на самом деле не является линейкой наилучшего соответствия для этого набора данных!). К сожалению, MATPLOTLIB автоматически не меняет цвет каждого сюжета, если вы поручите линию и график разброса друг на друга. Итак, я вручную изменил его на красный с C Ключевое слово аргумент.

Чтобы узнать больше о случайном модуле Python, проверьте мою статью.

Давайте погрузимся в более подробный пример того, как легенды работают в Matplotlib.

Пример легенды Matplotlib

Чтобы отобразить легенду на любом сюжете, вы должны позвонить plt.legend () В какой-то момент в вашем коде – обычно, как раз перед PLT.Show () это хорошее место.

Есть 3 способа, которые вы можете назвать это:

  1. PLT.LEGEND ()
  2. PLT.LEGEND (этикетки)
  3. PLT.LEGEND (ручки, этикетки)

Первый вариант – plt.legend () – Автоматически обнаруживает, какие элементы отображаются. Это делает это путем отображения всех участков, которые были помечены с помощью этикетка Ключевое слово аргумент. Орден строк в легенде совпадает с тем, что вы их построить.

vals = np.array([0, 1, 2, 3, 4])

# Plot vals first
plt.plot(vals, label='vals')

# Plot vals/2 second
plt.plot(vals/2, label='vals/2')

# Call plt.legend() without arguments
plt.legend()
plt.show()

Сначала я построена vals а потом построены vals/2 Отказ Вы можете увидеть, что vals Отображается первым в легенде и является синей линией. Теперь давайте поменяем заказ.

# Plot vals/2 first
plt.plot(vals/2, label='vals/2')

# Plot vals second
plt.plot(vals, label='vals')

# Call plt.legend() without arguments
plt.legend()
plt.show()

Сейчас vals/2 Отображается первым в легенде и окрашен синим цветом. Изменяя порядок участков, вы измените не только порядок в легенде, но и цвета строк.

Примечание. Вы можете вручную контролировать цвета, используя C Аргумент ключевых слов, если вы хотите.

Второй вариант – plt.legend (этикетки) – Редко используется, но я покажу вам, что это делает только для полноты.

Аргумент этикетки Должен быть нерешным – скорее всего, список или кортеж – содержащий этикетки, которые вы хотите отобразить в легенде. Вместо явно маркировки каждую строку вы рисуете так:

plt.plot(x_1, label='plot_1')
plt.plot(x_2, label='plot_2')
plt.legend()
plt.show()

Вы не маркируете никаких строк явно и вместо этого накладывайте их на основе заказа, которые они появляются:

plt.plot(x_1)
plt.plot(x_2)
plt.legend(['plot_1', 'plot_2'])
plt.show()

Этот метод работает, но может привести к вам много головных болей. Например, то, что потенциал этикетки Должен быть точно таковой длины, что и количество линий, которые вы рисуете. Более того, если вы измените заказ любого из ваших участков, вы также должны изменить порядок элементов в этикетки Отказ Наконец, он нарушает дзен Питона Явт лучше, чем неявное Потому что вы неявно отметили каждый участок на основе его заказа.

Всем гораздо проще, если вы явно маркируете каждый из участков, а не подразумевающихся так, как это нравится. Таким образом, оба Matplotlib Docs И я не рекомендую вам использовать этот метод.

Последний метод – PLT.LEGEND (ручки, этикетки) – предоставляет вам самую гибкость, но требует немного дольше, чтобы написать.

Оба Ручки и этикетки Есть ли меры – обычно списки или кортежи. Ручки Являются ли линии, которые вы хотите появиться на легенде и этикетки Настоятельно, как я надеюсь, вы знаете уже, слово (ы), которое вы хотите появиться в легенде рядом с каждой строкой.

# Save plots with descriptive variable names
linear, = plt.plot(vals)
sqrt, = plt.plot(vals**0.5)

# Create iterables handles and labels
handles = [linear, sqrt]
labels = ['Linear', 'Square Root']

# Pass handles and lables to plt.legend()
plt.legend(handles, labels)
plt.show()

Во-первых, вы должны сохранить вывод каждой строки в переменной. Функция PLT.PLOT () Возвращает Список Длина 1, поэтому вы должны распаковать его, поместив запятую после вашего имени переменной, чтобы получить значение в списке. Значение является matplotlib.lines.line2d Объект, который является тем, как Matplotlib хранит линии.

# linear_wrong is a list of length 1
linear_wrong = plt.plot(val)

# linear_correct is a Line2D object - what you want
linear_correct, = plt.plot(val)

Для удобства чтения я создал списки Ручки и этикетки который я тогда передал plt.legend () Отказ Вы можете пропустить этот промежуточный шаг, если хотите.

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

Итак, чтобы сделать Квадратный корню появляются как первая запись в легенде, выполните следующие действия.

linear, = plt.plot(vals)
sqrt, = plt.plot(vals**0.5)

# Swap order of sqrt and linear
handles_ = [sqrt, linear]
labels_ = ['Square Root', 'Linear']

plt.legend(handles_, labels_)
plt.show()

На этом участке цвет строк не изменился, но порядок в легенде изменился, потому что я изменил список Ручки и этикетки Отказ

Наконец, одно многие программисты Python не знают, так это то, что если ваша метка начинается с подчеркивания, он не будет отображаться в легенде. Это может быть полезно, если у вас есть много участков и хочется иметь возможность легко сканировать код, но не отображать имена в участках.

# No legend displayed because of underscore
plt.plot(vals, label='_I will not be displayed')
plt.legend()
plt.show()
No handles with labels found to put in legend.

Matplotlib Legend Местоположение

Чтобы изменить местоположение легенды в Matplotlib, используйте loc Аргумент ключевых слов в plt.legend () Отказ

По умолчанию MATPLOTLIB рисует легенду в «Лучшим» местоположении I.E. Место, которое напоминает наименее с рисунком. Это может быть медленным, если вы построить много данных, поэтому вручную установленным местоположением может ускорить процесс.

Вручную установить его, используйте loc Ключевое слово и один из этих 10, самосвязки, строки:

  • «Верхнее правое» , «верхний левый» , «Верхний центр»
  • «Нижнее правое» , «Нижняя левая» , «Нижний центр»
  • «Центр справа» или «Центр слева»
  • «правильно» или «Центр» (по какой-то причине «левый» не вариант)

Вот несколько примеров положения легенды в разные места. Если вы не уверены, как построить подломы в Matplotlib, проверьте мою статью.

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=plt.figaspect(1/3))

# Differnet legend locations
locations = ['best', 'upper center', 'lower left']

for ax, loc in zip(axes.flat, locations):
    ax.plot(vals, label='vals')
    ax.set_title(f"Legend loc='{loc}")

    # Set legend location
    ax.legend(loc=loc)
plt.show()

Вы можете изменить местоположение по умолчанию для всех участков, установив plt.rcparams ['Legend.loc'] к loc Значение по вашему выбору.

Наконец, вы можете выбрать любые точки координат, передавая 2-кортеж на loc вместо строки. Это укажет местоположение нижнего левого угла легенды как Фракция осей Отказ Так что установить loc = (0,5, 0,5) Поместите нижний левый угла на полпути вдоль оси X и на полпути по оси Y.

plt.plot(vals, label='vals')

# Set location of legend
plt.legend(loc=(0.5, 0.5))

plt.title('Legend loc=(0.5, 0.5)')
plt.show()

Если вы вводите loc = (2, 2) Вы получаете очень странный выглядящий график, потому что Matplotlib помещает легенду на двойную длину и удвоить высоту осей.

plt.plot(vals, label='vals')

# Set location of legend
plt.legend(loc=(2, 2))

plt.title('Legend loc=(2, 2)')
plt.show()

Конечно, можно поместить легенду на любую точку координаты, которую вы хотите. Просто не забудьте масштабировать его по максимальным значениям оси X- и Y (оба 4 в этом примере). Итак, разместить легенду в координатные очки (2, 3) , пройти loc = (2/4, 3/4) Отказ

plt.plot(vals, label='vals')

# Set location of legend
plt.legend(loc=(2/4, 3/4))

plt.title('Legend at coordiante points (2, 3)')
plt.show()

MATPLOTLIB легенды размер шрифта

Чтобы изменить шрифт легенды, используйте fontsize Ключевое слово аргумент. Это может принять любой int или float – абсолютный размер в точках. Попробуйте много разных размеров, чтобы почувствовать это.

Вы также можете пройти одну из нескольких строк:

['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']

Это все относительно текущего размера шрифта по умолчанию. Давайте посмотрим на некоторые примеры.

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=plt.figaspect(1/3))

# Different font sizes to try
fonts = ['xx-small', 'medium', 'x-large']

for ax, font in zip(axes.flat, fonts):
    ax.plot(vals, label='vals')
    ax.set_title(f"Legend fontsize='{font}'")

    # Set fontsize in legend
    ax.legend(fontsize=font)    
plt.show()

Название легенды Matplotlib

Чтобы добавить заголовок к легенде, используйте Название Ключевое слово аргумент.

plt.plot(vals, label='vals')

# Add title to legend
plt.legend(title='My Awesome Legend')
plt.show()

Размер шрифта шрифта Matlotlib Legend

Чтобы изменить размер шрифта заголовка для легенды в MatPlotlib, используйте title_fontsize Ключевое слово аргумент. Как fontsize Аргумент ключевых слов, он принимает любой int или float – абсолютный размер в точках – или один из строк fontsize.

Matplotlib Docs на самом деле неверны, потому что говорят, что title_fontsize только принимает строку или Нет Отказ

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=plt.figaspect(1/3))

# Differnet fontsizes to try
title_size = ['large', 5, None]

for ax, size in zip(axes.flat, title_size):
    ax.plot(vals, label='vals')
    ax.set_title(f"Legend title_fontsize={size}")

    # Set title_fontsize of the legend
    ax.legend(title='My Awesome Legend', title_fontsize=size)
plt.show()

Matplotlib Legend Color.

Вы можете изменить оба FaceColor и Эджеколор из легенды, используя эти аргументы ключевых слов в вызове функций.

FaceColor является основным цветом и Эджеколор Я догадался, цвет вокруг края коробки.

fig, axes = plt.subplots(nrows=2, ncols=2)

# facecolors to choose
colors = ['red', 'blue', 'green', 'yellow']

for ax, color in zip(axes.flat, colors):
    ax.plot(vals, label=color)

    # Set facecolor of the legend
    ax.legend(facecolor=color)
plt.show()

Давайте сделаем то же самое сейчас, но просто измените цвет края.

fig, axes = plt.subplots(nrows=2, ncols=2)

# Edgecolors to choose
colors = ['red', 'blue', 'green', 'yellow']

for ax, color in zip(axes.flat, colors):
    ax.plot(vals, label=color)

    # Choose edgecolor of legend
    ax.legend(edgecolor=color)
plt.show()

Конечно, вы можете смешивать и сопоставить цветы лица и края к контенту вашего сердца.

fig, axes = plt.subplots(nrows=2, ncols=2)

# Colors to use
colors = ['red', 'blue', 'green', 'yellow']

# Same as colors but reversed
edges = colors[::-1]

for ax, color, edge in zip(axes.flat, colors, edges):
    ax.plot([0, 1, 2, 3, 4], label=color)

    # Choose both the facecolor and edgecolor
    ax.legend(facecolor=color, edgecolor=edge)
plt.show()

Заказ легенды Matplotlib

Чтобы узнать, как заказать элементы в легенде, посмотрите раздел примера легенды MatPlotlib.

Matplotlib легенда фона цвета

Чтобы узнать, как изменить цвет фона легенды, посмотрите сечение цвета легенды Matplotlib.

Заключение

Вот и все, теперь вы знаете все основы работы с легендами в Matplotlib.

Вы знаете три разных способа вызвать функцию – plt.legend () , plt.legend (этикетки) и PLT.LEGEND (ручки, этикетки) – Вы знаете, как установить свое местоположение с помощью строк, так и координатных точек. Кроме того, вы можете изменить размер шрифта, установить заголовок и даже изменить размер шрифта заголовка. Наконец, вы можете джазвать свои легенды, установив FaceColor или EdgeColor на все, что вы хотите.

Куда пойти отсюда?

Вы хотите, чтобы вы могли быть программистом на полный рабочий день, но не знаете, как начать?

Ознакомьтесь с чистым упаковочным величином, где Chris – Creator of Finxter.com – учит вас стать фрилансером Python в 60 дней или вернуть деньги!

https://tinyurl.com/become-a-python-freelancer

Неважно, если вы начинаете питон или Python Pro. Если вы не делаете шесть фигур/год с Python прямо сейчас, вы узнаете что-то из этого вебинара.

Это доказаны, методы NO-BS, которые получают ваши результаты быстро.

Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно.

https://tinyurl.com/become-a-python-freelancer

Expert Writer & Content Creator – наука о науке и машине. – Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом. Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно. – Работать со мной, пожалуйста, обратитесь к Upwork https://tinyurl.com/hire-adam-murphy