首页 > 解决方案 > 显示关系的图表 - 多个非数字列

问题描述

我目前正在做一个研究项目,并使用显示被推荐为现代奴隶制受害者的个人的数据。

我最初的计划只是为每个带有计数的标题制作简单的条形图。但是我需要展示关系(例如,大多数儿童推荐是英国女性,用于性剥削)。我玩过散点图,但在使用非数字数据时无法理解它。我使用'group-by'来获得计数,但不知道如何处理与图表相关的计数!

这是我制作的 df - 实际数据要大得多

test = {'Gender': ['Female','Female','Male','Male', 'Female'],
    'Age': ['Adult', 'Adult', 'Child', 'Child', 'Adult'],
    'Nationality': ['British', 'British', 'Vietnamese', 'Albanian', 'British'],
    'Type': ['Sexual', 'Sexual', 'Sexual', 'Labour', 'Criminal'],
    }

df = pd.DataFrame(test, columns = ['Gender', 'Age', 'Nationality','Type',])

dfcount=df.groupby(["Gender", "Age", "Nationality", "Type"]).Age.count().reset_index(name="count")

标签: pythonscatter-plot

解决方案


由于要显示这么多分类变量,一个好的解决方案是使用分面图。这意味着您创建多图网格,其中每个子图属于同一类型,但应用于不同的数据子集,由某些分类变量的值定义。seaborn 库非常适合此目的。

例如,要根据 和 的每个可能组合获得四个子图的网格,Gender每个AgeType在 x 轴上显示 y 轴上的计数,点颜色根据Nationality,你可以这样做(假设你有CountDataFrame 中包含实际数字的附加列):

import seaborn as sns

grid = sns.catplot(x='Type', y='Count', 
                   row='Gender', col='Age', 
                   hue='Nationality',
                   data=df, kind='point')

有关自定义和其他选项,请参阅sns.catplot()sns.pointplot()的 seaborn 文档。


推荐阅读