我想知道是否可以创建 Seaborn 计数图,但不是显示 y 轴上的实际计数,而是显示其组内的相对频率(百分比)(如指定的那样)hue
范围)。
我用以下方法解决了这个问题,但我无法想象这是最简单的方法:
# Plot percentage of occupation per income class
grouped = df.groupby(['income'], sort=False)
occupation_counts = grouped['occupation'].value_counts(normalize=True, sort=False)
occupation_data = [
{'occupation': occupation, 'income': income, 'percentage': percentage*100} for
(income, occupation), percentage in dict(occupation_counts).items()
]
df_occupation = pd.DataFrame(occupation_data)
p = sns.barplot(x="occupation", y="percentage", hue="income", data=df_occupation)
_ = plt.setp(p.get_xticklabels(), rotation=90) # Rotate labels
Result:
我正在使用众所周知的成人数据集UCI 机器学习存储库 http://archive.ics.uci.edu/ml/datasets/Adult。 pandas 数据框是这样创建的:
# Read the adult dataset
df = pd.read_csv(
"data/adult.data",
engine='c',
lineterminator='\n',
names=['age', 'workclass', 'fnlwgt', 'education', 'education_num',
'marital_status', 'occupation', 'relationship', 'race', 'sex',
'capital_gain', 'capital_loss', 'hours_per_week',
'native_country', 'income'],
header=None,
skipinitialspace=True,
na_values="?"
)
这个问题 https://stackoverflow.com/questions/33179122/seaborn-countplot-with-frequencies有点相关,但没有利用hue
范围。就我而言,我不能只更改 y 轴上的标签,因为条形的高度必须取决于组。