Графики и диаграммы: практическое руководство по Matplotlib и Seaborn

Раздел: Data Science -> Matplotlib и Seaborn

Основные библиотеки визуализации данных и их особенности

Как получить качественный график с минимальными усилиями в стиле, подходящем для анализа данных?

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


import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# Создание данных
df = pd.DataFrame({'x': range(10), 'y': [i**2 for i in range(10)]})
# Построение графика
sns.lineplot(data=df, x='x', y='y')
plt.show()

библиотека для построения графиков python (библиотека для построения графиков в python (matplotlib))

В этом примере Seaborn автоматически добавляет доверительный интервал (по умолчанию bootstrap), что удобно при анализе. Для изменения стиля используется функция sns.set_theme().

Типичные ошибки и их решение:

  • Ошибка импорта: если библиотеки не установлены, возникает ModuleNotFoundError. Решение: выполнить установку через pip (команда pip install seaborn matplotlib pandas).
  • Графики не отображаются в Jupyter Notebook: необходимо добавить магическую команду %matplotlib inline в начале ячейки.
  • Неправильный тип данных: Seaborn ожидает DataFrame, передача списка может вызвать ошибку. Решение: выполнить преобразование данных в DataFrame.

Другой пример - построение ящика с усами (boxplot) для сравнения распределений по категориям:


import seaborn as sns
import matplotlib.pyplot as plt
# Встроенный набор данных iris
df = sns.load_dataset('iris')
sns.boxplot(data=df, x='species', y='sepal_length')
plt.show()

библиотеки для визуализации данных python (библиотеки для визуализации данных в python (matplotlib, seaborn, plotly))

Как создать интерактивный график, которым можно управлять?

Для интерактивной визуализации применяется библиотека Plotly. Plotly Express позволяет создавать насыщенные графики с минимальным кодом. Например, точечный график с подсветкой при наведении мыши.


import plotly.express as px
import pandas as pd

# Использование встроенных данных
df = px.data.iris()
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species',
                 title='Диаграмма рассеяния ирисов')
fig.show()

визуализация программы python (визуализация программы на python)

Интерактивность включает увеличение, панорамирование, отображение значений при наведении. График можно сохранить в HTML файл для вставки в веб-страницу.

Возможные трудности:

  • В старых версиях Jupyter графики могут не отображаться без вызова fig.show() или использования plotly.offline.iplot.
  • Большие объемы данных приводят к замедлению, поэтому рекомендуется использовать агрегирование.
  • Ошибка при отсутствии пакета kaleido для экспорта в PNG: выполнить установку пакета kaleido (pip install kaleido).

Plotly также поддерживает 3D графики и анимацию. Например, построение поверхности:


import numpy as np
import plotly.graph_objects as go

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

fig = go.Figure(data=[go.Surface(z=Z, x=x, y=y)])
fig.show()

построить график по коду python (построение графика по коду python)

Как получить полный контроль над внешним видом графика для публикации?

Библиотека Matplotlib предоставляет объектно-ориентированный API для точной настройки каждой детали. Например, создание фигуры с осями и настройка подписей, размеров, шрифтов.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x, y, label='sin(x)', color='red', linewidth=2)
ax.set_xlabel('Значения X', fontsize=12)
ax.set_ylabel('Значения Y', fontsize=12)
ax.set_title('График синусоиды', fontsize=14)
ax.legend()
ax.grid(True, linestyle='--', alpha=0.7)
plt.show()

Python визуализация (визуализация в python)

Объектно-ориентированный подход позволяет легко комбинировать несколько графиков на одном холсте через subplots.

Распространенные проблемы:

  • Забывают вызвать plt.show() или fig.show() - окно не появляется.
  • Наложение элементов: рекомендуется использовать tight_layout() для автоматического подбора расстояний.
  • Проблемы с кириллицей в подписях: необходимо указать шрифт, поддерживающий русские буквы (например, 'DejaVu Sans').

Пример настройки нескольких подграфиков:


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
ax1.plot(x, y1, label='sin')
ax1.set_title('Синус')
ax1.legend()
ax2.plot(x, y2, label='cos', color='green')
ax2.set_title('Косинус')
ax2.legend()
plt.tight_layout()
plt.show()
- визуализация данных с помощью python и javascript (визуализация данных с помощью python и javascript)
- библиотеки визуализации python (библиотеки визуализации данных python)
- визуализация данных с помощью python (визуализация данных с помощью python)

Продвинутые примеры и их разбор

Пример 1. Многооконная визуализация с разными типами графиков

Задача: отобразить на одном холсте гистограмму распределения, scatter plot и линейный график для демонстрации взаимосвязей в данных.

Пример

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Генерация данных
np.random.seed(42)
df = pd.DataFrame({
    'x': np.random.randn(200),
    'y': np.random.randn(200) * 2,
    'z': np.linspace(0, 10, 200)
})

fig, axes = plt.subplots(2, 2, figsize=(10, 8))

# Гистограмма
axes[0,0].hist(df['x'], bins=20, color='skyblue', edgecolor='black')
axes[0,0].set_title('Гистограмма x')

# Scatter plot
axes[0,1].scatter(df['x'], df['y'], alpha=0.5, c='red')
axes[0,1].set_title('Диаграмма рассеяния x vs y')

# Линейный график
axes[1,0].plot(df['z'], df['x'], label='x', color='green')
axes[1,0].plot(df['z'], df['y'], label='y', color='orange')
axes[1,0].set_title('Линейные графики')
axes[1,0].legend()

# Четвертый подграфик пустой, можно убрать
axes[1,1].axis('off')

plt.tight_layout()
plt.show()
На экране появится фигура 2x2: в верхнем левом углу гистограмма, в верхнем правом - облако точек, нижний левый - два линейных графика, нижний правый пустой. Использование subplots с указанием номеров строк/столбцов позволяет гибко управлять расположением.

Пример 2. Тепловая карта корреляции с Seaborn

Матрица корреляции визуализируется с помощью тепловой карты. Часто применяется при разведочном анализе.

Пример

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Создание корреляционной матрицы
np.random.seed(123)
data = np.random.randn(100, 5)
df = pd.DataFrame(data, columns=['A','B','C','D','E'])
corr = df.corr()

# Маска для верхнего треугольника
mask = np.triu(np.ones_like(corr, dtype=bool))

sns.heatmap(corr, mask=mask, annot=True, fmt='.2f', cmap='coolwarm', 
            square=True, linewidths=0.5)
plt.title('Корреляционная матрица (нижний треугольник)')
plt.show()
Тепловая карта отобразится с цветовой шкалой от красного (отрицательная корреляция) до синего (положительная). Аннотации показывают точные значения коэффициентов. Маска скрывает верхнюю половину для избежания дублирования.

Пример 3. Анимация с помощью Matplotlib

Создание анимированного графика синусоиды, изменяющейся во времени.

Пример

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots(figsize=(6, 4))
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x), color='blue')

def animate(frame):
    y = np.sin(x + frame/10.0)
    line.set_ydata(y)
    return line,

ani = FuncAnimation(fig, animate, frames=100, interval=50, blit=True)
plt.show()
Будет запущена анимация: синусоида сдвигается по фазе. Параметр blit=True ускоряет обновление. Анимацию можно сохранить в GIF через ani.save('animation.gif', writer='pillow').

Пример 4. 3D поверхность с Matplotlib

Построение трехмерного графика функции Z = sin(sqrt(X^2+Y^2)).

Пример

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
fig.colorbar(surf)
ax.set_title('3D поверхность')
plt.show()
Отображается трехмерная поверхность с цветовой картой viridis. Можно вращать мышью для просмотра с разных ракурсов.

Пример 5. Интерактивная гистограмма с Plotly и слайдером

Гистограмма, где можно менять количество бинов с помощью ползунка.

Пример

import plotly.graph_objects as go
import numpy as np

np.random.seed(42)
data = np.random.randn(500)

fig = go.FigureWidget()
fig.add_trace(go.Histogram(x=data, nbinsx=30, name='Распределение'))
fig.update_layout(title='Гистограмма с регулировкой бинов',
                  xaxis_title='Значение',
                  yaxis_title='Частота')

# Создание слайдера для изменения числа бинов
slider = go.layout.Slider(
    steps=[{'label': str(n), 'method': 'restyle', 'args': [{'nbinsx': n}]} for n in [10,20,30,40,50]],
    currentvalue={'prefix': 'Число бинов: '},
    value=30
)
fig.update_layout(sliders=[slider])
fig.show()
Откроется интерактивная гистограмма с ползунком внизу. Изменение положения слайдера мгновенно меняет количество бинов, что полезно для анализа распределения.

Библиотеки для визуализации данных в Python (Matplotlib, Seaborn, Plotly) - comments

En
библиотеки для визуализации данных python (python)