在单个图中,所有列的boxplot由“label”列拆分

时间:2016-10-25 13:18:53

标签: python boxplot seaborn

查看boxplot API page,我想要一些看起来像这样的东西:

>>> iris = sns.load_dataset("iris")
>>> ax = sns.boxplot(data=iris, orient="h", palette="Set2")

enter image description here

除非我希望它由包含特定标签的列拆分,与下面示例中的hue参数所实现的类似:

ax = sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3")

enter image description here

此示例仅在定义xy时有效,但对于我想要实现的目标,我希望x基本上是数据框中的每一列(标签除外) )和y是频率,类似于第一个例子中显示的频率。如果用seaborn无法实现,我愿意为python尝试一些其他的可视化库。

1 个答案:

答案 0 :(得分:1)

你需要"卸下"或者"融化"数据一切都是值,而不是变量(长格式而不是宽格式)。

以下是这样的:

iris_xtab = seaborn.load_dataset("iris")
iris_long = pandas.melt(iris, id_vars='species')
seaborn.boxplot(x='species', y='value', hue='variable', data=iris_long)

enter image description here

或者将物种值遗漏为x(您必须按照之前的建议分配一个虚拟值

ax = seaborn.boxplot(x='pos', y='value', hue='variable', 
                     data=iris_long.assign(pos=1))

enter image description here