python 在单个直方图中绘制两个DataFrame.value_counts()

8xiog9wr  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(131)

我想在一个直方图中绘制两个不同的 Dataframe (每个 Dataframe 只有一列)。

d1 = {'Size': ['Big', 'Big', 'Normal','Big']}
df1 = pd.DataFrame(data=d1)

d2 = {'Size': ['Small','Normal','Normal','Normal', 'Small', 'Big', 'Big', 'Normal','Big']}
df2 = pd.DataFrame(data=d2)

#Plotting in one histogram
df1['Size'].value_counts().plot.bar(label = "df1")
df2['Size'].value_counts().plot.bar(label = "df2", alpha = 0.2,color='purple')

plt.legend(loc='upper right')
plt.show()

问题是直方图的x轴仅对df 2正确。对于df 1,应有3个“big”值和1个“normal”值:
histogram of df1 and df2.
我已经尝试了多种方法来生成图,这是最接近我想要的,这是两个 Dataframe 在同一个直方图,不同的颜色。
理想情况下,它们应该是并排的,但我没有设法找到如何做到这一点,而且“stacked = False”在这里不起作用。
任何帮助都欢迎。谢谢!

iyzzxitl

iyzzxitl1#

可以对显式X值执行reindex

x = ['Small', 'Normal', 'Big']
df1['Size'].value_counts().reindex(x).plot.bar(label = "df1")
df2['Size'].value_counts().reindex(x).plot.bar(label = "df2", alpha = 0.2,color='purple')

输出:

另一种选择:

(pd.concat({'df1': df1, 'df2': df2})
   .groupby(level=0).value_counts()
   .unstack(0)
   .plot.bar()
)

输出:

相关问题