Как вывести несколько графиков одновременно?
Написал код по заданию. В результате работы программы по очереди появляются три окна с графиками.
Нужно сделать так, чтобы они появлялись одновременно, а не один после закрытия другого или три полноценных графика в одном окне.
Инфы как это сделать я не нашел, помогите пожалуйста.
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 шт):
Для того чтобы отобразить несколько независимых графиков в одном окне -
предназначена функция 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()
Ответ @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()
