
теория 1к 2с / Построение графиков в Python с использованием модуля matplotlib. - практика
.pdf
Легенда
|
Исходный код |
Результат |
1 |
xs = np.linspace(0, 2*np.pi, 100) |
|
2 |
ys = np.sin(xs) |
|
3 |
ys1 = np.cos(xs) |
|
4 |
|
|
5 |
plt.plot(xs, ys, label="Синус") |
|
6 |
plt.plot(xs, ys1, label="Косинус") |
|
7 |
|
|
8 |
plt.title("Y = f(X)") |
|
9 |
plt.xlabel("Ось X") |
|
10 |
plt.ylabel("Ось Y") |
|
11 |
|
|
12# Отображение легенды
13plt.legend()
14plt.show()

Ограничение осей
|
Исходный код |
Результат |
1 |
xs = np.linspace(0, 2*np.pi, 100) |
|
2 |
ys = np.sin(xs) |
|
3 |
ys1 = np.cos(xs) |
|
4 |
|
|
5 |
plt.plot(xs, ys, label="Синус") |
|
6 |
plt.plot(xs, ys1, label="Косинус") |
|
7 |
|
|
8 |
plt.title("Y = f(X)") |
|
9 |
plt.xlabel("Ось X") |
|
10 |
plt.ylabel("Ось Y") |
|
11 |
|
|
12# Ограничение оси X
13plt.xlim(left=0)
14# Ограничение оси Y
15plt.ylim(-1, 1)
16
17plt.legend()
18plt.show()

Стили линий
|
Исходный код |
Результат |
1 |
xs = np.linspace(0, 2*np.pi, 100) |
|
2 |
s = np.sin(xs) |
|
3 |
ys = [s, s+1, s+2, s+3] |
|
4 |
|
|
5 |
# Черный штрих |
|
6 |
plt.plot(xs, ys[0], "--k", label=0) |
|
7 |
# Синий пунктир |
|
8 |
plt.plot(xs, ys[1], c="blue", |
|
9ls=":", label=1)
10 # Прозрачный штрих-пунктир
11 plt.plot(xs, ys[2], ls="-.",
12lw=3, alpha=0.5, label=2)
13# Без линии с маркерами
14plt.plot(xs, ys[3],
15ls="", marker="x",
16markevery=5, label=3)
17
18plt.legend()
19plt.show()

Две фигуры
|
|
Исходный код |
Результат |
|
|
|
|
||
|
1 |
xs = np.linspace(0, 2*np.pi, 100) |
|
|
|
2 |
ys1 = np.sin(xs) |
|
|
|
3 |
ys2 = np.cos(xs) |
|
|
|
4 |
|
|
|
|
5 |
# Создание первой фигуры |
|
|
|
6 |
plt.figure() |
|
|
|
7 |
|
|
|
|
8 |
plt.plot(xs, ys1) |
|
|
|
9 |
plt.title("Синус") |
|
|
|
10 |
|
|
|
|
11 |
# Создание второй фигуры |
|
|
|
12 |
plt.figure() |
|
|
|
13 |
|
|
|
|
14 |
plt.plot(xs, ys2) |
|
|
|
15 |
plt.title("Косинус") |
|
|
|
16 |
|
|
|
|
17 |
# Отображение обеих фигур |
|
|
|
18 |
plt.show() |
|
|
|
|
|
|
|
|
|
|
|
|

Подграфики
|
Исходный код |
Результат |
1 |
xs = np.linspace(0, 2*np.pi, 100) |
|
2 |
ys1 = np.sin(xs) |
|
3 |
ys2 = np.cos(xs) |
|
4 |
|
|
5 |
# Создание первого подграфика |
|
6 |
plt.subplot(221) |
|
7 |
plt.plot(xs, ys1) |
|
8 |
plt.title("Синус") |
|
9 |
|
|
10 |
# Создание второго подграфика |
|
11plt.subplot(222)
12plt.plot(xs, ys2)
13plt.title("Косинус")
15# Создание третьего подграфика
16plt.subplot(212)
17plt.plot(xs, ys1 + ys2)
18plt.title("Сумма")
20# Корректировка расстояний
21# между подграфиками
22plt.tight_layout()
23plt.show()

Встроенные стили
|
Исходный код |
Результат |
1 |
import matplotlib as mpl |
|
2 |
|
|
3 |
# Задание стиля графика |
|
4 |
mpl.style.use("seaborn-whitegrid") |
|
5 |
|
|
6 |
xs = np.linspace(0, 2*np.pi, 100) |
|
7 |
ys1 = np.sin(xs) |
|
8 |
ys2 = np.cos(xs) |
|
9 |
|
|
10 |
plt.plot(xs, ys1, label="Синус") |
|
11 |
plt.plot(xs, ys2, label="Косинус") |
|
12 |
|
|
13plt.legend()
14plt.show()

Виды графиков
|
Исходный код |
Результат |
1 |
xs = np.linspace(0, 2*np.pi, 1000) |
|
2 |
ys = np.sin(xs) |
|
3 |
# Создание псевдо-экспериментальных данных |
|
4 |
yr = ys + np.random.randn(ys.size) / 5 |
|
5 |
# Расчет отклонений |
|
6 |
err = ys - yr |
|
7 |
|
|
8 |
plt.subplot(211) |
|
9 |
plt.plot(xs, ys, c="black") |
|
10 |
# Построение дискретных точек |
|
11plt.scatter(xs, yr, alpha=0.15)
12plt.title("y = f(x)")
13
14plt.subplot(212)
15# Построение гистограммы
16plt.hist(err, bins=20)
17plt.title("Распределение ошибок")
18plt.xlabel("Значение отклонения")
19plt.ylabel("Частота")
20
21plt.tight_layout()
22plt.show()

Объектно-ориентированный подход
Рассмотрим пример использования объектно-
ориентированного подхода для построения графиков
Использование ООП открывает доступ к гораздо большему количеству настроек и модификаций
Практически все примеры на официальном сайте MatPlotLib выполнены с применением
ООП

Использование ООП
Исходный код |
Результат |
1 xs = np.linspace(0, 2*np.pi, 1000)
2 ys1 = np.sin(xs)
3 ys2 = np.cos(xs)
4
5 # Создание фигуры и подграфиков
6 fig, axs = plt.subplots(1, 2)
7
8 # Первый подграфик
9 axs[0].plot(xs, ys1)
10axs[0].set_title("Синус")
11axs[0].set_xlabel("Ось X")
12axs[0].set_ylabel("Ось Y")
14# Второй подграфик
15axs[1].plot(xs, ys2)
16axs[1].set_title("Косинус")
17axs[1].set_xlabel("Ось X")
18axs[1].set_ylabel("Ось Y")
20plt.tight_layout()
21plt.show()

3D графики
|
Исходный код |
Результат |
1 |
import matplotlib as mpl |
|
2 |
# Позволяет использовать 3D |
|
3 |
from mpl_toolkits.mplot3d import Axes3D |
|
4 |
# Создание исходных данных |
|
5 |
x = np.linspace(0, 5, 30) |
|
6 |
# Создание координатной сетки |
|
7 |
X, Y = np.meshgrid(x, x) |
|
8 |
Z = np.sin(X) + np.cos(Y) |
|
9 |
# Создание основной фигуры |
|
10 |
fig = plt.figure() |
|
11 |
# Добавление на фигуру первой 3D проекции |
|
12 |
ax1 = fig.add_subplot(221, projection='3d') |
|
13 |
ax1.scatter(X, Y, Z, c=Z.flatten(), cmap=mpl.cm.coolwarm) |
|
14ax1.set_title("scatter")
15# Добавление на фигуру второй 3D проекции
16ax2 = fig.add_subplot(222, projection='3d')
17ax2.plot_surface(X, Y, Z, cmap=mpl.cm.hot)
18ax2.set_title("plot_surface")
19# Добавление на фигуру третьей 3D проекции
20ax3 = fig.add_subplot(223, projection='3d')
21ax3.plot_wireframe(X, Y, Z)
22ax3.set_title("plot_wireframe", fontsize=14)
24plt.show()