组的柱状图规范化和排序(xaxis)

2024-09-30 02:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我想要实现seaborn的barplot部分所需要做的。你知道吗

import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas as pd 
import statsmodels.api as sm 
import numpy as np

da = pd.read_csv("nhanes_2015_2016.csv")

da["DMDMARTL"] = da.DMDMARTL.fillna("Missing")
da["DMDMARTLdescript"] = da.DMDMARTL.replace({1: "Married", 2: "Widowed", 3: "Divorced", 4: "Separated", 5: "Never married", 
                             6: "Living with partner",       77: "Refused", 99: "Don't know"})

da["RIAGENDRx"] = da.RIAGENDR.replace({1: "Male", 2: "Female"})

da["agegrp"] = pd.cut(da.RIDAGEYR, [10, 20, 30, 40, 50, 60, 70, 80])

我在这里和那里拼凑了一些代码,得到了下面的内容。你知道吗

y = "prop"
dx = da.loc[~da.RIAGENDRx.isin(["Male"]), :]
plt.figure(figsize=(12, 5))
prop_df = (dx["agegrp"]
       .groupby(dx["DMDMARTLdescript"])
       .value_counts(normalize=True)
       .rename(y)
       .reset_index())
sns.barplot(x="agegrp", y=y, hue="DMDMARTLdescript", data=prop_df)

运行上述代码的结果如下

Image

我对它产生的情节有以下问题。你知道吗

  1. 尽管我已经要求每个年龄组被标准化`(normalized=True),但是根据图片,很明显每个年龄组的条数之和超过1。

  2. 年龄组沿着x轴以某种任意的方式排列。我不知道如何按数字顺序排列。

(csv文件在这里公开github link。)


Tags: csvimportaspltseaborndapdsns

热门问题