Визуализации Matplotlib не должны быть бельмом на глазу — эти советы помогут

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

Для начала нам понадобится набор данных для визуализации. Набор данных Iris вполне подойдет, так как здесь нам не нужна сложность. Он находится под лицензией Creative Commons 0 (CC0), что означает, что вы можете использовать его бесплатно. Следующий фрагмент загружает его в Python как Pandas DataFrame:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7d537619d0e07d5ae3/iris.csv")
df.head()

Вот как это выглядит:

Простой точечный график длины чашелистиков по оси X и ширины чашелистиков по оси Y будет служить в качестве базовой линии. Вот как это сделать:

plt.figure(figsize=(9, 5))

plt.plot(df["sepal.length"], df["sepal.width"], "rs")
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")
plt.title("Iris dataset - Sepal length vs. Sepal width")
plt.show()

Как вы понимаете, выглядит это не лучшим образом:

График квадратный, размытый и оставляет желать лучшего. Давайте начнем устранять эти недостатки один за другим.

Совет № 1. Отображайте рисунки Matplotlib в формате SVG

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

Звучит как магия, но как это работает с Matplotlib? Что ж, вы можете изменить форматы Matplotlib в среде ноутбука следующим образом:

from IPython import display
display.set_matplotlib_formats("svg")

Это действительно все, что вам нужно сделать. Если вы используете скрипт Python для создания диаграммы Matplotlib, используйте следующий синтаксис, чтобы сохранить ее в форме SVG:

plt.savefig("<figure-name>.svg")

Теперь вы можете запустить тот же самый код генерации диаграмм, что и раньше:

plt.figure(figsize=(9, 5))

plt.plot(df["sepal.length"], df["sepal.width"], "rs")
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")
plt.title("Iris dataset - Sepal length vs. Sepal width")
plt.show()

Разница в качестве изображения ночь и день:

Качество остается прежним, даже если вы увеличиваете масштаб сегмента диаграммы, как показано ниже:

Короче говоря, всегда используйте SVG. Это, безусловно, лучший метод, и он требует 1-2 строк кода, в зависимости от того, работаете ли вы в среде сценария или блокнота.

Совет № 2 — Настройте параметры построения по умолчанию

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

Взгляните на приведенный ниже фрагмент кода — он изменяет размер фигуры по умолчанию, удаляет верхнюю и правую границы и настраивает общий размер шрифта:

plt.rcParams["figure.figsize"] = 12, 6
plt.rcParams["axes.spines.top"] = False
plt.rcParams["axes.spines.right"] = False
plt.rcParams["font.size"] = 14
plt.rcParams["figure.titlesize"] = "xx-large"
plt.rcParams["xtick.labelsize"] = "medium"
plt.rcParams["ytick.labelsize"] = "medium"

Теперь вы можете визуализировать любую диаграмму Matplotlib, и будут применены измененные стили:

plt.plot(df["sepal.length"], df["sepal.width"], "rs")
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")
plt.title("Iris dataset - Sepal length vs. Sepal width")
plt.show()

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

Совет № 3 — Измените шрифт

Этот совет, вероятно, самый простой способ добавить внешний вид вашей компании к визуализации данных. Существует множество способов добавления пользовательских шрифтов, но тот, который я покажу, работает каждый раз. Шрифт не нужно устанавливать — его нужно просто скачать.

Например, вы можете скачать Poppins from Google Fonts и распаковать ZIP-файл. После этого используйте font_manger Matplotlib для добавления шрифтов из каталога. Вот все, что доступно от Poppins:

import matplotlib.font_manager as font_manager

font_dir = ["/Users/dradecic/Desktop/Poppins"]
for font in font_manager.findSystemFonts(font_dir):
    print(font)
    font_manager.fontManager.addfont(font)

Вариантов шрифтов довольно много, но как их использовать в Matplotlib? Это просто, просто укажите другой rcParam:

plt.rcParams["font.family"] = "Poppins"

plt.plot(df["sepal.length"], df["sepal.width"], "rs")
plt.xlabel("Sepal length")
plt.ylabel("Sepal width")
plt.title("Iris dataset - Sepal length vs. Sepal width")
plt.show()

Излишне говорить, что этот подход будет работать с любым шрифтом TTF, который вы сможете найти.

Резюме 3 советов по стилю Matplotlib

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

Каковы ваши главные советы по работе с Matplotlib? Используете ли вы какой-то набор параметров в каждом проекте? Пожалуйста, дайте мне знать в разделе комментариев ниже.

Понравилась статья? Станьте участником Medium, чтобы продолжать обучение без ограничений. Я получу часть вашего членского взноса, если вы перейдете по следующей ссылке, без каких-либо дополнительных затрат с вашей стороны.



Оставайся на связи

Первоначально опубликовано на https://betterdatascience.com 29 августа 2022 г.