pandas histogram:每列的绘图直方图作为大图的子图

Eda*_*ame 6 python histogram pandas

我正在使用以下代码,尝试将我的pandas数据框df_in的每一列的直方图绘制为一个大图的子图.

%matplotlib notebook
from itertools import combinations
import matplotlib.pyplot as plt

fig, axes = plt.subplots(len(df_in.columns) // 3, 3, figsize=(12, 48))
for x in df_in.columns:
    df_in.hist(column = x, bins = 100)

fig.tight_layout()
Run Code Online (Sandbox Code Playgroud)

但是,直方图没有显示在子图中.谁知道我错过了什么?谢谢!

T D*_*T D 7

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

fig, axis = plt.subplots(2,3,figsize=(8, 8))
df_in.hist(ax=axis)
Run Code Online (Sandbox Code Playgroud)

上面将绘制一个 2*3(数据帧总共 6 个直方图)。根据您的排列要求调整行和列(列数)

我的助教 @Benjamin 曾经告诉我,dataframe 意味着不必使用 for 循环。


Pas*_*iou 6

我不能评论burhan的答案,因为我没有足够的声望点.他的答案的问题是它axes不是一维的,它包含轴三元组,因此需要展开:

%matplotlib notebook
from itertools import combinations
import matplotlib.pyplot as plt

fig, axes = plt.subplots(len(df_in.columns)//3, 3, figsize=(12, 48))

i = 0
for triaxis in axes:
    for axis in triaxis:
        df_in.hist(column = df_in.columns[i], bins = 100, ax=axis)
        i = i+1
Run Code Online (Sandbox Code Playgroud)


bur*_*han 3

您需要指定要绘制到哪个轴。这应该有效:

fig, axes = plt.subplots(len(df_in.columns)//3, 3, figsize=(12, 48))
for col, axis in zip(df_in.columns, axes):
    df_in.hist(column = col, bins = 100, ax=axis)
Run Code Online (Sandbox Code Playgroud)

  • 我比下面帕斯卡的答案更喜欢这个答案,但正如他提到的,有一个错误。对我来说axes.flatten() 做到了这一点 (4认同)