Matplotlib: создание графиков и диаграмм

Раздел: Разработка на Python -> Matplotlib и Seaborn

Основы работы с библиотекой Matplotlib

Базовое построение графика функции y = sin(x) с использованием модуля pyplot. Этот подход подходит для быстрой визуализации без глубокой настройки.


import matplotlib.pyplot as plt
import numpy as np

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

plt.plot(x, y, color='blue', linestyle='-', linewidth=2, label='sin(x)')
plt.title('График функции sin(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.legend()
plt.show()
  

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

После выполнения откроется окно с кривой. Цель: первичный анализ временных рядов или математических функций.

Частая ошибка:

График не отображается в Jupyter Notebook. Решение: выполнить %matplotlib inline перед импортом или использовать plt.show().

Как построить несколько кривых на одном графике?

Необходимо для сравнения тенденций. Используется либо несколько вызовов plot(), либо один вызов с несколькими массивами.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), label='sin(x)')
plt.plot(x, np.cos(x), label='cos(x)')
plt.legend()
plt.show()
  

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

Если оси Y имеют разные масштабы, используется twinx() для создания второй оси.


fig, ax1 = plt.subplots()
ax1.plot(x, np.sin(x), 'b-')
ax1.set_ylabel('sin')

ax2 = ax1.twinx()
ax2.plot(x, np.exp(x/10), 'r--')
ax2.set_ylabel('exp')
plt.show()
  

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

Проблема:

Кривые накладываются, не видна одна из них. Решение: регулировать прозрачность (alpha) или порядок построения.

Как создать столбчатую диаграмму (bar chart)?

Подходит для сравнения категориальных данных. Используется bar() для вертикальных и barh() для горизонтальных столбцов.


import matplotlib.pyplot as plt

categories = ['Apple', 'Samsung', 'Xiaomi']
values = [45, 30, 25]
plt.bar(categories, values, color=['red', 'blue', 'green'])
plt.title('Рыночная доля 2024')
plt.ylabel('Проценты')
plt.show()
  

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

Назначение: визуализация номинальных данных, сравнение частот.

Типичная ошибка:

Подписи категорий перекрываются, если их много. Решение: повернуть подписи с помощью plt.xticks(rotation=45).

Как добавить легенду и настроить её расположение?

Обязательно для графиков с несколькими линиями. Легенда добавляется через legend(), метки задаются в plot() параметром label.


plt.plot(x, y1, label='температура')
plt.plot(x, y2, label='давление')
plt.legend(loc='upper left', frameon=True, shadow=True)
plt.show()
  

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

Параметр loc определяет позицию (например, 'best', 'center', 'lower right'). Применяется во всех типах графиков.

Проблема:

Легенда не появляется. Причина: не задан label в графических элементах. Решение: добавить label='название' или через plt.legend(['a','b']).

Как построить гистограмму распределения данных?

Гистограмма показывает частоту попадания значений в интервалы. Используется hist(). Пример для нормального распределения.


import numpy as np
data = np.random.randn(1000)
plt.hist(data, bins=20, edgecolor='black', density=True)
plt.xlabel('Значение')
plt.ylabel('Плотность')
plt.title('Нормальное распределение')
plt.show()
  

Python создание графика (создание графика в python)

Параметр bins задает количество корзин. density=True нормирует гистограмму. Используется в статистическом анализе.

Ошибка:

Гистограмма выглядит ступенчатой, не отражает распределение. Решение: подобрать оптимальное число bins (например, по формуле Стёрджеса, значение по умолчанию).

Как создать несколько подграфиков (subplots) на одном рисунке?

Удобно для сравнения нескольких связанных визуализаций. Используется subplots() или subplot(). Пример сетки 2x2.


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
fig, axs = plt.subplots(2, 2, figsize=(10, 6))

axs[0,0].plot(x, np.sin(x))
axs[0,0].set_title('sin')

axs[0,1].plot(x, np.cos(x), 'r')
axs[0,1].set_title('cos')

axs[1,0].plot(x, np.tan(x), 'g')
axs[1,0].set_ylim(-5, 5)
axs[1,0].set_title('tan')

axs[1,1].plot(x, np.exp(x/10), 'm')
axs[1,1].set_title('exp')

plt.tight_layout()
plt.show()
  

Цель: компактное представление нескольких зависимостей. tight_layout() предотвращает перекрытие элементов.

Проблема:

Названия осей и заголовки наезжают друг на друга. Решение: использовать plt.subplots_adjust(wspace=0.4, hspace=0.4) или tight_layout().

- библиотеки визуализации python (библиотеки визуализации данных python)
- визуализация данных с помощью python (визуализация данных с помощью python)
- Python сохранить график (сохранение графика с помощью python)

Расширенные примеры

Пример 1. Использование встроенных стилей для быстрого изменения внешнего вида графика.

Пример

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')  # стиль, имитирующий графики R

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

plt.plot(x, y, label='sin')
plt.plot(x, np.cos(x), label='cos')
plt.legend()
plt.title('График в стиле ggplot')
plt.show()
Результат: график отображается с серым фоном, белой сеткой и яркими линиями; заголовок и подписи имеют шрифт без засечек. Доступны стили: 'seaborn', 'bmh', 'fivethirtyeight' и другие.

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

Пример

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(8, 5))

x = np.linspace(0, 2*np.pi, 100)
ax.plot(x, np.sin(x), label='sin', linewidth=2)
ax.plot(x, np.sin(x + np.pi/2), label='cos', linestyle='--')

ax.set_title('ООП стиль Matplotlib')
ax.set_xlabel('угол (рад)')
ax.set_ylabel('амплитуда')
ax.legend(loc='upper right')
ax.grid(True, which='both', linestyle=':', alpha=0.7)

plt.show()
Результат: график с двумя кривыми, пунктирная линия, сетка в виде точек, легенда в правом верхнем углу. Размер фигуры 8x5 дюймов.

Пример 3. Создание анимации с помощью FuncAnimation. Демонстрирует динамическое обновление данных.

Пример

import matplotlib.pyplot as plt
import numpy as np
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, blit=True)
plt.show()
Результат: открывается окно с анимированной синусоидой, которая движется влево. Анимация состоит из 100 кадров, обновляется каждые 50 мс. Для сохранения анимации используется ani.save('animation.gif', writer='pillow').

Графика с matplotlib в Python - comments

En
графика matplotlib в python (python)