Несколько областей графиков
По умолчанию создаётся одно графическое окно figure(1) и одна графическая область subplot(111) в этом окне. Команда subplot позволяет разбить графическое окно на несколько областей. Она имеет три параметра: nrows, ncols, nplot.nrows - количество строк;
ncols - количество столбцов;
nplot - номер области (от 1 до nrows*ncols). Если nrows*ncols<10, то можно писать без запятой nrows, ncols, nplot.
Можно subplot(2,2,1), а можно subplot(221).
import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) # от -10 до 10.01 с шагом 0.01 (>1000 точек) t = np.arange(-10, 11, 1) # от -10 до 11 с шагом 1 (20 точек) fig = plt.figure() #subplot 1 plt.subplot(221) # первая область plt.plot(x, np.sin(x)) # sin(x) на [-10, 10] цветом по умолчанию plt.title(r'$\sin(x)$') # заголовок "sin(x)" plt.grid(True) # рисовать решетку #subplot 2 plt.subplot(222) # вторая область plt.plot(x, np.cos(x), 'g') # cos(x) на [-10, 10] зеленая линия plt.axis('equal') # одинаковый масштаб по осям Х и Y plt.grid(True) # рисовать решетку plt.title(r'$\cos(x)$') # заголовок "cos(x)" #subplot 3 plt.subplot(223) # третья область plt.plot(x, x**2, t, t**2, 'ro') # 2 графика, первый линией, второй красными кругами plt.title(r'$x^2$') # заголовок "x2" # решетки нет #subplot 4 plt.subplot(224) # четвертая область plt.plot(x, x) # прямая y=x # оси с подписями нарисовать # левую в центре plt.subplot(224).spines['left'].set_position('center') # нижнюю в центре plt.subplot(224).spines['bottom'].set_position('center') plt.title(r'$x$') # заголовок "x" plt.show() fig.savefig('2.png')

Вариант с squeeze=False
Можно обращаться ax[0,0], ax[0,1], ax[1,0], ax[1,1], если вызвать subplots с параметром squeeze=False# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt x = np.arange(-10, 10.01, 0.01) # от -10 до 10.01 с шагом 0.01 (>1000 точек) t = np.arange(-10, 11, 1) # от -10 до 11 с шагом 1 (20 точек) fig, ax = plt.subplots(2, 2, figsize=(8,8), sharex=True, squeeze=False) # sharex=True общие оси Х для верхних и нижних графиков, # но оси У для правых и левых графиков - разные # squeeze=False возвращает массив осей ax, # обращаемся ax[0,0], ax[0,1], ax[1,0], ax[1,1] #subplot 1 ax[0,0].plot(x, np.sin(x)) # sin(x) на [-10, 10] цветом по умолчанию ax[0,0].set_title(r'$\sin(x)$') # заголовок "sin(x)" ax[0,0].grid(True) # рисовать решетку #subplot 2 ax[0,1].plot(x, np.cos(x), 'g') # cos(x) на [-10, 10] зеленая линия ax[0,1].axis('equal') # одинаковый масштаб по осям Х и Y ax[0,1].grid(True) # рисовать решетку ax[0,1].set_title(r'$\cos(x)$') # заголовок "cos(x)" #subplot 3 ax[1,0].plot(x, x**2, t, t**2, 'ro') # 2 графика, первый линией, второй красными кругами ax[1,0].set_title(r'$x^2$') # заголовок "x2" # решетки нет #subplot 4 ax[1,1].plot(x, x) # прямая y=x # оси с подписями нарисовать # левую в центре ax[1,1].spines['left'].set_position('center') # нижнюю в центре ax[1,1].spines['bottom'].set_position('center') ax[1,1].set_title(r'$x$') # заголовок "x" ax[1, 0].set_xlabel("x") # подписи у осей (не все графики) ax[0, 0].set_ylabel("y") ax[1, 0].set_ylabel("y") # красиво расположить области с отступами plt.subplots_adjust(left=0.1, right=0.95, bottom=0.1, top=0.95, wspace=0.1, hspace=0.2) plt.show() fig.savefig('2a.png')
