Графики в 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).

Построение графиков в Python - comments

En
графики python примеры (python)