У меня есть фрейм данных pandas, у которого есть только числовые столбцы, и я пытаюсь создать отдельную гистограмму для всех функций.
ind group people value value_50
1 1 5 100 1
1 2 2 90 1
2 1 10 80 1
2 2 20 40 0
3 1 7 10 0
3 2 23 30 0
но в моих реальных данных есть 50+ столбцов, как я могу создать отдельный график для всех них
я пытался
df.plot.hist( subplots = True, grid = True)
Это дало мне перекрывающийся неясный сюжет.
как я могу упорядочить их, используя подзаголовки pandas = True. Пример ниже может помочь мне получить графики в сетке (2,2) для четырех столбцов. Но это длинный метод для всех 50 столбцов.
fig, [(ax1,ax2),(ax3,ax4)] = plt.subplots(2,2, figsize = (20,10))
Вы использовали плотную компоновку?
@goyo не 4 сюжета, это был просто пример
Так что это был пример того, чего вы не хотите. Но чего ты хочешь? Как должна выглядеть фигура?
График гистограммы @goyo для всех столбцов во фрейме данных, просто! В приведенном выше примере это 5 столбцов, в моем реальном примере это 50. Можете ли вы написать что-нибудь общее? Я уверен, что это можно сделать
Похоже, вам просто нужна фигура побольше, но вы уже знаете, как это сделать, так чего же не хватает?
Панды subplots=True
расставят оси в один столбец.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.rand(7,20))
df.plot(subplots=True)
plt.tight_layout()
plt.show()
Здесь tight_layout
не применяется, потому что фигура слишком мала, чтобы красиво расположить оси. Однако можно использовать фигуру побольше (figsize=(...)
).
Чтобы иметь оси на сетке, можно использовать параметр layout
, например.
df.plot(subplots=True, layout=(4,5))
Того же можно добиться, если создать оси через plt.subplots()
fig, axes = plt.subplots(nrows=4, ncols=5)
df.plot(subplots=True, ax=axes)
@ ImportanceOfBeingErnest Не могли бы вы понять, как обрабатывать масштаб осей X и Y на каждом графике? !Вот вопрос
Если вы хотите построить их отдельно (именно поэтому я оказался здесь), вы можете использовать
for i in df.columns:
plt.figure()
plt.hist(df[i])
Альтернативой этой задаче может быть использование метода «hist» с гиперпараметром «layout». Пример использования части кода, предоставленного @ImportanceOfBeingErnest:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.rand(7,20))
df.hist(layout=(5,4), figsize=(15,10))
plt.show()
Хотя это и не было задано в вопросе, я решил добавить, что использование параметра x
для построения графика позволит вам указать столбец для данных оси x.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.rand(7,20),columns=list('abcdefghijklmnopqrst'))
df.plot(x='a',subplots=True, layout=(4,5))
plt.tight_layout()
plt.show()
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html
вы хотите 50+ гистограмм в 4 участках?