Seaborn и Matplotlib: эффективная визуализация данных в Python
Основные методы построения графиков
Как быстро построить линейный график с помощью Matplotlib?
Базовый способ создания графика в Python - использование модуля pyplot из библиотеки Matplotlib. Он предоставляет простой интерфейс, похожий на MATLAB.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.xlabel("Ось X")
plt.ylabel("Ось Y")
plt.title("Простой линейный график")
plt.show()
библиотека для построения графиков python (библиотека для построения графиков в python (matplotlib))
Пояснение: данные передаются в plt.plot(), затем добавляются подписи и заголовок. Вызов plt.show() отображает окно с графиком.
Типичная ошибка: забыть вызвать plt.show() - график не отобразится. В Jupyter Notebook можно использовать %matplotlib inline, чтобы показывать графики внутри ячейки.
Как построить столбчатую диаграмму?
Столбчатые диаграммы удобны для сравнения категориальных данных. Используется функция plt.bar().
import matplotlib.pyplot as plt
категории = ['Яблоки', 'Бананы', 'Апельсины']
количество = [25, 15, 30]
plt.bar(категории, количество, color='skyblue')
plt.xlabel('Фрукты')
plt.ylabel('Количество')
plt.title('Продажи фруктов')
plt.show()
библиотеки для визуализации данных python (библиотеки для визуализации данных в python (matplotlib, seaborn, plotly))
Параметр color задаёт цвет столбцов. Для горизонтальной ориентации используйте plt.barh().
Проблема: если данные содержат большое количество категорий, столбцы могут наложиться. Решение - изменить ширину через параметр width или повернуть подписи оси X (plt.xticks(rotation=45)).
Как построить несколько графиков на одном рисунке?
Для сравнения нескольких зависимостей удобно разместить графики в сетке. Используется plt.subplot() или plt.subplots().
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(2, 2, figsize=(10, 6))
axes[0,0].plot(x, np.sin(x), 'r')
axes[0,0].set_title('Синус')
axes[0,1].plot(x, np.cos(x), 'b')
axes[0,1].set_title('Косинус')
axes[1,0].plot(x, np.exp(x/10), 'g')
axes[1,0].set_title('Экспонента')
axes[1,1].plot(x, x**2, 'k')
axes[1,1].set_title('Квадрат')
plt.tight_layout()
plt.show()
библиотеки визуализации python (библиотеки визуализации данных python)
plt.subplots(2,2) создаёт 4 подграфика. Обращение к каждому через axes[i,j]. tight_layout() автоматически регулирует расстояния.
Ошибка: если индексы выходят за пределы массива, возникнет IndexError. Проверяйте размерность созданной сетки.
Как настроить стиль графика с помощью Seaborn?
Seaborn упрощает создание эстетичных графиков с настройками по умолчанию. Подключается поверх Matplotlib.
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="darkgrid")
tips = sns.load_dataset("tips")
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
plt.title("Чаевые vs Счёт")
plt.show()
построить график по коду python (построение графика по коду python)
sns.set_theme() задаёт общий стиль. scatterplot - точечный график с автоматической цветовой легендой.
Проблема: если данные не встроенного датасета, нужно передать DataFrame с правильными именами столбцов. Ошибка KeyError - проверьте написание колонок.
Как сохранить график в файл?
Для сохранения вместо plt.show() используйте plt.savefig().
plt.plot([1,2,3],[4,5,6])
plt.savefig('graph.png', dpi=300, bbox_inches='tight')
Параметр dpi задаёт разрешение, bbox_inches='tight' обрезает лишние поля. Поддерживаются форматы PNG, PDF, SVG.
Ошибка: если вызвать savefig() после show(), файл может быть пустым. Сохраняйте до отображения.
Расширенные примеры построения графиков
Пример 1: Анимация графика
Создание анимированного синусоидального сигнала с помощью FuncAnimation.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
line, = ax.plot(x, np.sin(x))
def update(frame):
line.set_ydata(np.sin(x + frame/10))
return line,
ani = FuncAnimation(fig, update, frames=100, interval=50)
# для сохранения: ani.save('sin_animation.gif', writer='pillow')
plt.show()
Функция update изменяет y-данные на каждом кадре. interval задаёт задержку в мс.
Результат: анимированная синусоида, движущаяся вправо.
Пример 2: Гистограмма с KDE и наложенной нормальной кривой
Seaborn позволяет совместить гистограмму и оценку плотности распределения (KDE).
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
data = np.random.normal(0, 1, 1000)
sns.histplot(data, kde=True, bins=30, color='purple', edgecolor='white')
plt.title('Распределение с KDE')
plt.show()
kde=True добавляет линию плотности. bins - количество столбцов.
Пример 3: Тепловая карта корреляций
Визуализация матрицы корреляции с помощью sns.heatmap.
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(5,5), columns=['A','B','C','D','E'])
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Тепловая карта корреляций')
plt.show()
annot=True выводит значения в ячейках. cmap - цветовая схема.
Пример 4: Пользовательские настройки осей и легенды
Детальная настройка внешнего вида: изменение шкалы, добавление сетки, кастомизация легенды.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5, 50)
y1 = np.exp(x)
y2 = np.exp(2*x)
plt.plot(x, y1, label='exp(x)', linewidth=2)
plt.plot(x, y2, label='exp(2x)', linestyle='--', color='red')
plt.yscale('log') # логарифмическая шкала по Y
plt.grid(True, which='both', linestyle=':', alpha=0.6)
plt.legend(loc='upper left', frameon=True, fancybox=True, shadow=True)
plt.title('Экспоненциальные функции (логарифмическая шкала)')
plt.show()
Пример 5: График с доверительным интервалом (Seaborn)
Использование sns.lineplot с автоматическим построением доверительной полосы.
import seaborn as sns
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame({
'time': np.tile(np.arange(10), 5),
'value': np.random.normal(0, 1, 50).cumsum(),
'group': np.repeat(['A','B','C','D','E'], 10)
})
sns.lineplot(data=df, x='time', y='value', hue='group', err_style='band', ci=95)
plt.title('Линии тренда с доверительным интервалом 95%')
plt.show()
Параметр ci=95 показывает 95% доверительный интервал (затенённая область).