如何按照 DataFrame 列的顺序使用 Matplotlib 绘制直方图网格?

How to plot a grid of histograms with Matplotlib in the order of the DataFrame columns?

考虑下面的简单数据框:

import pandas  as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'var3':[1,3,9,6,1,6,3,1,1,3],
                   'var1':[9,1,2,6,6,5,9,3,1,7],
                   'var2':[6,6,2,9,8,3,5,4,1,3]})
df

现在,让我们根据这些数据绘制一组直方图:

df.hist(layout=(1,3))
plt.show()

请注意,图中直方图的顺序(从左到右)与数据框中列的顺序不同。如何让直方图服从其数据源的顺序?

我无法在 df.hist() 函数中找到执行此操作的方法。但是您可以使用下面的简单循环来完成它:

fig, ax = plt.subplots(1, len(df.columns), figsize=(3*len(df.columns), 3))
for i, var in enumerate(df):
    df[var].hist(ax=ax[i])
    ax[i].set_title(var)
plt.show()

结果:

我喜欢@foglerit 的回答,但这是另一个解决方法:

import pandas  as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'var3':[1,3,9,6,1,6,3,1,1,3],
                   'var1':[9,1,2,6,6,5,9,3,1,7],
                   'var2':[6,6,2,9,8,3,5,4,1,3]})

columns = df.columns  # save original column names
columns_temp = []  # create temporary column names, numbered
for i, col in enumerate(df.columns):
    columns_temp.append('(' + str(i+1) + ') ' + str(col))
df.columns = columns_temp

df.hist(layout=(1,3))  # now the column order is not messed up

df.columns = columns  # reassign original column names