python - 我如何绘制分成类别的数据的相对频率?

标签 python python-3.x pandas matplotlib

我想根据类别标签获取人们权重的相对频率,然后将其绘制为条形图,如下所示:
enter image description here
数据框如下所示:

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)
seaborn

关于python - 我如何绘制分成类别的数据的相对频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65150022/

相关文章:

python - 如何将Python字典列表保存到垂直显示的json文件中

Python:使用 pandas 从 Excel 转换为 CSV 时保留前导零

python - 如何检查用户输入的字符列表中是否有相同的字符?

python - 用 Python 复制 SAS 的第一个和最后一个功能

python - 在 Django 中创建自定义用户模型时,从 models.Model 和 AuthUser 继承有什么区别?

python - 使用 scrapy 将抓取的项目保存到 json/csv/xml 文件

python - 将当前类作为返回类型注释

mysql - 如何计算组上的函数(作为聚合)

python - Pandas dataframe 取消堆叠数据并创建新列

python - 聚合 Pandas 数据框中的单元格/列