5. Как строить графики?

Как размещать несколько графиков вместе (несколько областей Axes на Figure) мы разобрались. Как теперь строить эти самые графики? Все довольно просто, после того как мы создали область Axes, которая по сути является объектом Python, мы можем воспользоваться любым из методов этого объекта, включая и те, которые занимаются отображением данных на этой области:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

#  Данные, которые хотим отобразить:
x1 = 10*np.random.rand(100)    #  координаты 'x'
y1 = 10*np.random.rand(100)    #  координаты 'y'

ax.scatter(x1, y1)    #  метод, отображающий данные в виде точек
                      #  на плоскости

ax.set(title='Случайные точки')    #  метод, размещающий заголовок
                                       #  над "Axes"
    
plt.show()

Отображение данных на области Axes, методами самой области Axes в matplotlib

При этом мы можем отображать на одной области Axes несколько наборов данных, как одинаковыми так и разными методами:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x1 = np.linspace(0, 10, 30)
y1 = np.random.beta(0.1, 0.6, size = 30)
x2 = np.linspace(11, 20, 30)
y2 = np.random.gamma(shape = 0.3, scale = 1.1, size = 30)
x3 = np.linspace(21, 30, 30)
y3 =np.random.pareto(3.5, size = 30)

#  Данные в виде точек:
ax.scatter(x1, y1)
ax.scatter(x2, y2)
ax.scatter(x3, y3)

#  Данные в виде линий:
ax.plot(x1, y1 + 3)
ax.plot(x2, y2 + 3)
ax.plot(x3, y3 + 3)

ax.set(title='Бетта, Гамма и Паретто распределения')
    
plt.show()

Отображение различных наборов данных на области Axes в matplotlib

В случае, когда у нас несколько областей Axes, то отображение на них данных, ничем не отличается от случая единственной области. Однако, если вы помните, области Axes можно добавить двумя способами: add_subplot() и subplots(). Давайте рассмотрим случай add_subplot():

import numpy as np
import matplotlib.pyplot as plt

#  Данные:
x = np.linspace(0, 10, 100)
y = np.sin(x)
img = y.reshape(5, 20)

#  Создаем "Figure" и "Axes":
fig = plt.figure()

ax_1 = fig.add_subplot(2, 1, 1)
ax_2 = fig.add_subplot(2, 1, 2)

#  Методы, отображающие данные:
ax_1.plot(x, y)
ax_2.imshow(img)

#  Добавление заголовков:
ax_1.set(title = 'sin(x)')
ax_2.set(title = 'img')

plt.show()

Отображение различных данных на разных областях Axes, созданных методом add_subplot(), в пределах одной Figure в matplotlib

В случае subplots() все тоже самое, только к областям Axes мы обращаемся по индексу:

import numpy as np
import matplotlib.pyplot as plt

#  Данные:
x = np.linspace(0, 10, 100)
y = np.sin(x)
img = y.reshape(5, 20)

#  Создаем "Figure" и "Axes":
fig, axes = plt.subplots(nrows = 2, ncols = 1)

#  Методы, отображающие данные:
axes[0].plot(x, y)
axes[1].imshow(img)

#  Добавление заголовков:
axes[0].set(title = 'sin(x)')
axes[1].set(title = 'img')

plt.show()

И получаем тот же самый результат:

Отображение различных данных на разных областях Axes, созданных методом add_subplots(), в пределах одной Figure в matplotlib