我想根据类别标签获取人们权重的相对频率,然后将其绘制为条形图,如下所示:
数据框如下所示:
Weight Category
83.8 A
87.3 A
75.1 B
70.9 A
69.8 C
75.5 B
... ...
我想将每个类别的权重提取到自己的数据框中,并设法获得一个类别的相对频率,但我不确定如何将它们一起绘制。# This holds the total number of people in each category, with categories in alphabetical order
counts = df.groupby("Category")["Weight"].count()
catA = df.loc[df["Category"] == "A"]["Weight"].reset_index().drop(columns="index")
catA["bucket"] = pd.cut(catA["Weight"], 10)
newA = catA[["bucket", "Weight"]].groupby("bucket").count()
newE["relative"] = newE["Weight"] / counts[0]
ax = newA["relative"].plot(kind="bar", title="Relative Frequency of Weight for Category A")
ax.set(xlabel="Weight Bucket", ylabel="Relative Frequency (%)")
ax.tick_params(axis="x", labelrotation=45)
plt.show()
最佳答案
Seaborn 是一个基于 matplotlib 的 Python 数据可视化库。它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形。 ( https://seaborn.pydata.org/ )
你不会像使用原始 matplotlib 那样灵活,但也许它只适合你,并为你提供强大的默认值。
使用带有 Hue 和 multiple=dodge 的 histplot 似乎可以满足您的需求。来自 https://seaborn.pydata.org/generated/seaborn.histplot.html#seaborn.histplot 的官方文档
sns.histplot(data=tips, x="day", hue="sex", multiple="dodge", shrink=.8)
关于python - 我如何绘制分成类别的数据的相对频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65150022/