Как вывести несколько графиков одновременно?

Написал код по заданию. В результате работы программы по очереди появляются три окна с графиками.

Нужно сделать так, чтобы они появлялись одновременно, а не один после закрытия другого или три полноценных графика в одном окне.

Инфы как это сделать я не нашел, помогите пожалуйста.

import random

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.style.use('ggplot')

mn, mx, N = -10000, 10000, 1000
dataset = pd.Series(data=[random.randint(mn, mx) for _ in range(1000)],
                    name='X')

print("Характеристики полученных целочисленных данных :\n")

print(f"Минимальное значение : {dataset.min()}")
print(f"Количество повторяющихся значений : {N - dataset.nunique()}")
print(f"Максимальное значение : {dataset.max()}")
print(f"Сумма чисел : {dataset.sum()}")

plt.plot(list(range(1000)), dataset, alpha=0.8)
plt.title("Линейный график\n(по заданным  целочисленным данным)")
plt.show()

plt.hist(dataset, alpha=0.8)
plt.title('Гистограмма значений \n(по заданным  целочисленным данным)')
plt.show()

dataframe = pd.DataFrame(dataset)
dataframe['X_по_возрастанию'] = dataframe.X.sort_values().values
dataframe['X_по_убыванию'] = dataframe.X.sort_values(ascending=False).values
dataframe.head()

plt.plot(dataframe['X_по_возрастанию'], label="X по возрастанию")
plt.plot(dataframe['X_по_убыванию'], label="X по убыванию")
plt.title('Два линейных графика отсортированных значений\n(по заданным  целочисленным данным)')
plt.legend()
plt.show()

Ответы (2 шт):

Автор решения: S. Nick

Для того чтобы отобразить несколько независимых графиков в одном окне - предназначена функция subplot() из пакета pylab.

import random

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Импортируем один из пакетов Matplotlib
import pylab


plt.style.use('ggplot')

mn, mx, N = -10000, 10000, 1000
dataset = pd.Series(data=[random.randint(mn, mx) for _ in range(1000)],
                    name='X')

print("Характеристики полученных целочисленных данных :\n")

print(f"Минимальное значение : {dataset.min()}")
print(f"Количество повторяющихся значений : {N - dataset.nunique()}")
print(f"Максимальное значение : {dataset.max()}")
print(f"Сумма чисел : {dataset.sum()}")

# Две строки, два столбца. Текущая ячейка - 1
pylab.subplot (2, 2, 1)
pylab.plot(list(range(1000)), dataset, alpha=0.8)
pylab.title ("Линейный график")

# Две строки, два столбца. Текущая ячейка - 3
pylab.subplot (2, 2, 3)
pylab.hist(dataset, alpha=0.8)    #plot (xlist, ylist)
pylab.title ("Гистограмма значений")

dataframe = pd.DataFrame(dataset)
dataframe['X_по_возрастанию'] = dataframe.X.sort_values().values
dataframe['X_по_убыванию'] = dataframe.X.sort_values(ascending=False).values
dataframe.head()

# Две строки, два столбца. Текущая ячейка - 2
pylab.subplot (1, 2, 2)
pylab.plot (dataframe['X_по_возрастанию'], label="X по возрастанию")
pylab.plot (dataframe['X_по_убыванию'], label="X по убыванию")
pylab.title ("Два линейных графика")

# Покажем окно с нарисованным графиком
pylab.show()

введите сюда описание изображения

→ Ссылка
Автор решения: Pak Uula

Ответ @S.Nick в целом верен, но у него есть один большой недостаток: в нём используется matplotlib.pylab. Разработчики matplotlib рекомендуют пользоваться pyplot.

pylab был разработан для упрощения жизни тем людям, кто переходит в Python из MATLAB. Этот пакет импортирует в глобальное пространство имён все рисовальные функции pyplot И вычислительные функции numpy, благодаря чему пайтоновский скрипт становится похожим на матлабовский. Типа такого:

from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y)
show()

Вызовы pylab.subplot работают, но несколько бессмысленны, так как это прямые синонимы функций из pyplot. В ответе S.Nick вы можете заменить все обращения к pylab.subplot на вызов оригинала pyplot.subplot:

import random

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.style.use('ggplot')

mn, mx, N = -10000, 10000, 1000
dataset = pd.Series(data=[random.randint(mn, mx) for _ in range(1000)],
                    name='X')

print("Характеристики полученных целочисленных данных :\n")

print(f"Минимальное значение : {dataset.min()}")
print(f"Количество повторяющихся значений : {N - dataset.nunique()}")
print(f"Максимальное значение : {dataset.max()}")
print(f"Сумма чисел : {dataset.sum()}")

# Две строки, два столбца. Текущая ячейка - 1
plt.subplot (2, 2, 1)
plt.plot(list(range(1000)), dataset, alpha=0.8)
plt.title ("Линейный график")

# Две строки, два столбца. Текущая ячейка - 3
plt.subplot (2, 2, 3)
plt.hist(dataset, alpha=0.8)    #plot (xlist, ylist)
plt.title ("Гистограмма значений")

dataframe = pd.DataFrame(dataset)
dataframe['X_по_возрастанию'] = dataframe.X.sort_values().values
dataframe['X_по_убыванию'] = dataframe.X.sort_values(ascending=False).values
dataframe.head()

# Две строки, два столбца. Текущая ячейка - 2
plt.subplot (1, 2, 2)
plt.plot (dataframe['X_по_возрастанию'], label="X по возрастанию")
plt.plot (dataframe['X_по_убыванию'], label="X по убыванию")
plt.title ("Два линейных графика")

plt.show()
→ Ссылка