问题描述
我有一个数据框,我想绘制每列的直方图。
df_play = pd.DataFrame({'a':['cat','dog','cat'],'b':['apple','orange','orange']})
df_play['a'] = df_play['a'].astype('category')
df_play['b'] = df_play['b'].astype('category')
df_play
df_play.hist(layout = (12,10))
但是我得到ValueError: num must be 1 <= num <= 0, not 1
当我尝试使用整数而不是值中的类别时,它工作得很好,但是我真的希望唯一字符串的名称在x轴上。
1楼
您可以仅在列和图之间应用pd.value_counts
。
>>> df_play.apply(pd.value_counts).T.stack().plot(kind='bar')
如果您想要合适的子图或更复杂的东西,建议您仅使用value_counts
进行迭代,然后自己创建子图。
2楼
由于没有用于分箱的自然参数,也许您想要的而不是直方图是每个Series
的条形图?
如果是这样,您可以通过实现
df_play['a'].value_counts().plot(kind='bar')
3楼
我意识到,要做到这一点的一种方法是先指定无花果和斧头,然后循环遍历要绘制值计数的数据框的列名。
fig, axs = plt.subplots(1,len(df_play.columns),figsize(10,6))
for i,x in enumerate(df_play.columns):
df_play[x].value_counts().plot(kind='bar',ax=axs[i])