Использование библиотеки Matplotlib. Как добавить легенду к графику
Легендой называют табличку внутри или около графика, в которой показано какая линия каким данным соответствует или как-то иначе пытается показать, чем отличается по смыслу одна линия на графике от другой. Самый простой способ показать легенду - это вызвать функцию legend() из пакета matplotlib.pyplot, но кроме этого есть и другие способы.
Первый способ
В качестве параметра функции legend() нужно передать список или кортеж, содержащий столько элементов, сколько графиков нарисовано в рабочем окне. Элементов может быть и меньше, но в этом случае последние графики, на которых не хватит элементов кортежа или списка, останутся без подписей.
Следующий пример рисует два графика и к каждому из них добавляет описание в виде легенды.
# Импортируем один из пакетов Matplotlib
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
# Шаг между точками
dx = 0.1
# Создадим список координат по оси X на отрезке [xmin; xmax], включая концы
x = np.arange(xmin, xmax + dx, dx)
# Вычислим значение функции в заданных точках
y1 = np.sinc(x)
y2 = np.sinc(x * 0.2)
# Нарисуем два одномерных графика
plt.plot(x, y1, 'b-')
plt.plot(x, y2, 'g--')
# !!! Добавим легенду
# !!! Первому графику будет соответствовать надпись 'f(x)',
# !!! А второму - 'f(x * 0.2)'
plt.legend (('f(x)', 'f(x * 0.2)'))
# Покажем окно с нарисованным графиком
plt.show()
В результате будет показан следующий график:
Второй способ
Предыдущий способ отображения легенды плох тем, что вам надо помнить, в каком порядке какие кривые добавлялись на график. Если вы в процессе работы измените порядок отображения графиков, то вам надо будет не забыть поменять порядок и в функции legend(), что легко забыть сделать, и тогда график не будет соответствовать действительности. Именно поэтому предыдущий способ не рекомендуется применять.
Более аккуратно того же самого результата мы можем добиться, если при рисовании графиков в функцию plot() мы будем передавать дополнительный именованный параметр label с описанием кривой, а затем вызовем функцию legend() без параметров.
# Импортируем один из пакетов Matplotlib
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
# Шаг между точками
dx = 0.1
# Создадим список координат по оси X на отрезке [xmin; xmax], включая концы
x = np.arange(xmin, xmax + dx, dx)
# Вычислим значение функции в заданных точках
y1 = np.sinc(x)
y2 = np.sinc(x * 0.2)
# Нарисуем два одномерных графика
# !!! Метки сразу привязываем к соответствующей кривой графика
plt.plot(x, y1, 'b-', label='f(x)')
plt.plot(x, y2, 'g--', label='f(x * 0.2)')
# !!! Добавим легенду
plt.legend ()
# Покажем окно с нарисованным графиком
plt.show()
Этот способ более удобен тем, что каждому графику сразу приписывается какая-то метка.
Третий способ
Также метки можно устанавливать, передавая в функцию legend() два списка: список из экземпляров классов кривых, которые возвращает функция plot(), а также список меток. При этом длины этих двух списков должны быть одинаковыми. Этот способ особенно удобен, если вы в одном вызове функции plot() создаете несколько кривых. Например:
# Импортируем один из пакетов Matplotlib
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
# Шаг между точками
dx = 0.1
# Создадим список координат по оси X на отрезке [xmin; xmax], включая концы
x = np.arange(xmin, xmax + dx, dx)
# Вычислим значение функции в заданных точках
y1 = np.sinc(x)
y2 = np.sinc(x * 0.2)
# Нарисуем два одномерных графика
line1, line2 = plt.plot(x, y1, 'b-', x, y2, 'g--')
# !!! Добавим легенду
plt.legend ([line1, line2], ['f(x)', 'f(x * 0.2)'])
# Покажем окно с нарисованным графиком
plt.show()
Четвертый способ
Предыдущий пример можно модифицировать таким образом, чтобы метки привязывались к кривым с помощью метода set_label() из класса, отвечающего за отображение кривых. Такой способ показан в следующем примере:
# Импортируем один из пакетов Matplotlib
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
# Шаг между точками
dx = 0.1
# Создадим список координат по оси X на отрезке [xmin; xmax], включая концы
x = np.arange(xmin, xmax + dx, dx)
# Вычислим значение функции в заданных точках
y1 = np.sinc(x)
y2 = np.sinc(x * 0.2)
# Нарисуем два одномерных графика
line1, line2 = plt.plot(x, y1, 'b-', x, y2, 'g--')
# !!! Установим метки с помощью метода set_label()
line1.set_label('f(x)')
line2.set_label('f(x * 0.2)')
# !!! Добавим легенду
plt.legend ()
# Покажем окно с нарисованным графиком
plt.show()
Заголовок легенды
Функция legend() может принимать достаточно большое количество дополнительных параметров, чтобы более тонко настраивать внешний вид и положение легенды (см. статью Как менять положение легенды). В данной статье мы рассмотрим только один из них, который позволяет добавить в легенду заголовок. Для этого надо передать дополнительный строковый параметр title со строкой заголовка.
# Импортируем один из пакетов Matplotlib
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
# Шаг между точками
dx = 0.1
# Создадим список координат по оси X на отрезке [xmin; xmax], включая концы
x = np.arange(xmin, xmax + dx, dx)
# Вычислим значение функции в заданных точках
y1 = np.sinc(x)
y2 = np.sinc(x * 0.2)
# Нарисуем два одномерных графика
# !!! Метки сразу привязываем к соответствующей кривой графика
plt.plot(x, y1, 'b-', label='f(x)')
plt.plot(x, y2, 'g--', label='f(x * 0.2)')
# !!! Добавим легенду
plt.legend(title='f(x) = sinc(x)')
# Покажем окно с нарисованным графиком
plt.show()
В результате график будет выглядеть следующим образом:
Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.