我试图遍历数据帧中名为“ Struct.DF”的所有列,并为每个列生成直方图。
#This is a summary of columns
Struct_DF.columns
Index(['ID', 'lh_BA1_ExV_Area', 'lh_BA2_ExV_Area', 'lh_BA3a_ExV_Area',
'lh_BA3b_ExV_Area', 'lh_BA4a_ExV_Area', 'lh_BA4p_ExV_Area',
'lh_BA6_ExV_Area', 'lh_BA44_ExV_Area', 'lh_BA45_ExV_Area',
...
'R_presubiculum_Vol_Adj', 'R_parasubiculum_Vol_Adj',
'R_molecular_layer_HP_Vol_Adj', 'R_GC_ML_DG_Vol_Adj',
'R_CA3_Vol_Adj',
'R_CA4_Vol_Adj', 'R_fimbria_Vol_Adj', 'R_HATA_Vol_Adj',
'R_Whole_hippocampus_Vol_Adj', 'eTIV'],
dtype='object', length=735)
# Check for normalcy of distribution of each variable.
# Set the column names
columns= Struct_DF.columns
# Loop over all columns
#using 2x2 matrix representation of histrogram specified by firs two
#digits of subplot index and third index specifies the plot number (eg. #221)
i = 221
for col in columns:
plt.subplot(i)
plt.hist(Struct_DF[col])
i+=1
我收到以下错误消息:
ValueError: num must be 1 <= num <= 4, not 5
有没有一种方法可以并排生成这些图?
注意:问题已根据建议的答案进行了编辑。
答案 0 :(得分:1)
Struct_DF.col
等效于Struct_DF['col']
,这就是为什么您会收到错误,没有列'col'
,您想要做的是Struct_DF[col]
要绘制直方图,可以执行以下操作:
fig, axs = plt.subplots(len(df.columns), figsize=(5, 25))
for n, col in enumerate(df.columns):
df[col].hist(ax=axs[n])
如果要使用2x2网格,可以改为这样做,但需要指定要绘制的4列:
cols_to_plot = ['lh_BA4a_ExV_Area', 'lh_BA4p_ExV_Area',
'lh_BA6_ExV_Area', 'lh_BA44_ExV_Area']
fig, axs = plt.subplots(2, 2)
for n, col in enumerate(cols_to_plot):
i, j = [int(l) for l in "{0:02b}".format(n)]
df[col].hist(ax=axs[i][j])
您也可以使用ax[i].hist(df[col])
代替df[col].hist(ax=ax[i])
或:
for i in range(4):
plt.subplot(2, 2, i)
plt.hist(df[cols_to_plot[i]])