Matplotlib: Использование GridSpec
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
np.random.seed(0)
x = np.linspace(0, 10, 500)
fig = plt.figure(constrained_layout=True, figsize=(10, 6))
gs = fig.add_gridspec(nrows=3, ncols=3)
ax_main = fig.add_subplot(gs[:, :2]) # занимает все строки и первые 2 столбца
ax_r1 = fig.add_subplot(gs[0, 2]) # правый верхний
ax_r2 = fig.add_subplot(gs[1, 2]) # правый средний
ax_r3 = fig.add_subplot(gs[2, 2]) # правый нижний
# основной график
ax_main.plot(x, np.sin(x), label='sin')
ax_main.plot(x, np.cos(x), label='cos')
ax_main.set_title('Main: sin & cos')
ax_main.legend()
# три маленьких
ax_r1.plot(x, np.abs(np.sin(x)) * 10)
ax_r1.set_title('abs(sin) x10')
ax_r2.hist(np.random.randn(200), bins=18)
ax_r2.set_title('hist')
sc = ax_r3.scatter(x[::10], np.sin(x)[::10], c=np.cos(x)[::10], cmap='viridis')
ax_r3.set_title('scatter (c == cos)')
# общий colorbar для правой колонки
fig.colorbar(sc, ax=[ax_r1, ax_r2, ax_r3], shrink=0.8)
plt.show()