如何使用Matplotlib按数据帧列的顺序绘制直方图网格?

如何使用Matplotlib按数据帧列的顺序绘制直方图网格?,matplotlib,histogram,Matplotlib,Histogram,考虑以下简单数据框: 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(lay

考虑以下简单数据框:

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.子图(1,len(df.列),figsize=(3*len(df.列),3))
对于i,枚举中的var(df):
df[var].hist(ax=ax[i])
ax[i]。设置标题(变量)
plt.show()
结果:


我喜欢@foglerit的答案,但这里有另一个解决方案:

将熊猫作为pd导入
将matplotlib.pyplot作为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#保存原始列名
列_temp=[]#创建临时列名,编号
对于i,枚举中的列(df.列):
列临时附加('('+str(i+1)+')'+str(列))
df.columns=columns\u temp
hist(layout=(1,3))#现在列顺序没有混乱
df.columns=列#重新指定原始列名