Matplotlib: создание графиков и диаграмм
Основы работы с библиотекой 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().
Расширенные примеры
Пример 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').