Графики в Python: практическое руководство с примерами кода
Построение графиков в Python: основные подходы и библиотеки
Как создать базовый линейный график с помощью Matplotlib?
Matplotlib - это основная библиотека для статической визуализации. Она предоставляет полный контроль над каждым элементом графика.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)')
plt.title('График синуса')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()
Python pandas пример (примеры pandas в python)
После вызова plt.show() откроется окно с графиком. Если график не отображается в Jupyter Notebook, добавьте %matplotlib inline.
Проблема: График отображается пустым или не появляется вовсе. Решение: проверьте, что вызов plt.show() находится в конце кода, а также что данные корректно переданы в plot(). В средах без GUI используйте plt.savefig('filename.png') вместо show().
Как сделать стильные статистические графики с Seaborn на основе Matplotlib?
Seaborn упрощает создание сложных визуализаций с минимальным кодом, особенно для статистических данных.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('iris')
sns.pairplot(df, hue='species')
plt.show()
Python excel примеры (примеры работы с excel в python)
Использование: Seaborn идеален для быстрого исследования корреляций, распределений и категориальных данных.
Типичная ошибка: Импорт Seaborn до Matplotlib может вызвать конфликт стилей. Решение: сначала импортируйте Matplotlib, затем Seaborn, или используйте sns.set_theme() для настройки внешнего вида.
Как создать интерактивный график для веба с помощью Plotly?
Plotly позволяет создавать zoomable, tooltip и анимированные графики, которые работают в браузере.
import plotly.express as px
df = px.data.gapminder()
fig = px.scatter(df, x='gdpPercap', y='lifeExp', animation_frame='year',
size='pop', color='continent', hover_name='country',
log_x=True, size_max=55, range_y=[25,90])
fig.show()
графики python примеры (построение графиков в python)
Результат - HTML-виджет с анимацией по годам. Для встраивания в сайт используйте fig.write_html('file.html').
Проблема: В некоторых средах (например, JupyterLab) график не отображается. Решение: установите plotly и ipywidgets, а также включите plotly.offline.init_notebook_mode().
Как быстро построить график прямо из DataFrame с помощью Pandas?
Pandas имеет встроенную обертку над Matplotlib для удобного построения графиков на основе столбцов.
import pandas as pd
import numpy as np
df = pd.DataFrame({'год': [2015,2016,2017,2018],
'продажи': [100, 150, 130, 170]})
df.plot(x='год', y='продажи', kind='line', title='Продажи по годам')
plt.show()
Доступны виды: line, bar, hist, box, scatter и другие.
Типичная ошибка: Метод plot() возвращает объект Axes, а не figure. Если нужно сохранить график, получите figure через plt.gcf() или используйте df.plot().figure.savefig(...).
Как настроить подписи и цвета в Matplotlib для профессионального вида?
plt.plot(x, y, color='crimson', linestyle='--', linewidth=2, marker='o')
plt.text(5, 0.5, 'важная точка', fontsize=12, bbox=dict(facecolor='white', alpha=0.5))
Сложность: Избыточное количество элементов загромождает график. Решение: удалять лишние сетки и подписи, использовать легенду только при нескольких кривых.
Расширенные примеры построения графиков в Python
Пример 1. Сложный многослойный график в Matplotlib с использованием subplots
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 400)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x)*np.cos(x)
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0,0].plot(x, y1, 'r')
axes[0,0].set_title('Синус')
axes[0,1].plot(x, y2, 'b--')
axes[0,1].set_title('Косинус')
axes[1,0].plot(x, y3, 'g-.')
axes[1,0].set_title('Произведение')
axes[1,1].scatter(x[::20], y1[::20], c='purple', alpha=0.5)
axes[1,1].set_title('Дискретные точки')
plt.tight_layout()
plt.show()
[График с четырьмя подграфиками: синус, косинус, произведение и scatter-график]
Subplots позволяют разместить несколько взаимосвязанных графиков в одной фигуре. tight_layout() предотвращает наложение подписей.
Пример 2. Тепловая карта корреляций с Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')
corr = df.corr(numeric_only=True)
sns.heatmap(corr, annot=True, cmap='coolwarm', vmin=-1, vmax=1, linewidths=0.5)
plt.title('Корреляция числовых признаков tips')
plt.show()
[Тепловая карта 3x3 с аннотированными значениями корреляции]
Параметр annot=True отображает числа внутри ячеек. cmap задает цветовую шкалу. Важно: для корректной работы corr() необходимо выбрать только числовые столбцы.
Пример 3. Интерактивная 3D-поверхность с Plotly
import plotly.graph_objects as go
import numpy as np
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, colorscale='Viridis')])
fig.update_layout(title='3D поверхность sin(sqrt(x^2+y^2))',
scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'))
fig.show()
[Интерактивный 3D-график с возможностью вращения и зума]
3D-графики Plotly поддерживают вращение мышью. Для больших поверхностей можно уменьшить шаг сетки, но это повлияет на производительность.
Пример 4. Группированные столбчатые диаграммы с помощью Pandas и Matplotlib
import pandas as pd
import matplotlib.pyplot as plt
data = {'Группа': ['A','B','C','D'],
'2021': [23, 45, 56, 78],
'2022': [30, 50, 60, 85],
'2023': [35, 55, 65, 90]}
df = pd.DataFrame(data)
df.set_index('Группа').plot(kind='bar', figsize=(8,5), color=['#1f77b4', '#ff7f0e', '#2ca02c'])
plt.title('Продажи по группам за три года')
plt.ylabel('Значение')
plt.xticks(rotation=0)
plt.legend(title='Год')
plt.tight_layout()
plt.show()
[Группированный столбчатый график с тремя столбцами на каждую группу]
Метод df.set_index('Группа') задает метки по оси X. Для изменения ширины столбцов используется параметр width в plot().
Пример 5. Анимированный график движения точки с помощью Matplotlib.animation
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = ax.plot([], [], 'ro', animated=True)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True, interval=20)
plt.show()
[Анимация: точка движется по синусоиде, оставляя след]
Для сохранения анимации в GIF используйте ani.save('sinus.gif', writer='pillow'). Убедитесь, что установлены pillow и ffmpeg (для MP4).