繁体   English   中英

如何在 Seaborn boxplot 中按顺序设置分类轴?

[英]How to set a categorical axis in order in Seaborn boxplot?

我有一个数据框,我想根据其中的一列绘制箱线图和颜色:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = {'Age': [50, 30, 38, 43, 26, 30, 38, 46, 37, 43, 55, 29, 31, 31, 33, 34, 32, 25, 25, 40, 29, 34, 26, 30, 26, 30, 38, 29, 46, 30, 28, 26, 28, 61, 21, 44, 30, 30, 28, 66, 34, 40, 25, 44, 30, 27, 34, 24, 42, 57, 28, 23, 49, 34, 55, 28, 36, 33, 34, 26],
        'Age Bin': ['(47.0, 51.0]', '(28.0, 33.0]', '(37.0, 42.0]', '(42.0, 47.0]', '(23.0, 28.0]', '(28.0, 33.0]', '(37.0, 42.0]', '(42.0, 47.0]', '(33.0, 37.0]', '(42.0, 47.0]', '(51.0, 56.0]', '(28.0, 33.0]', '(28.0, 33.0]', '(28.0, 33.0]', '(28.0, 33.0]', '(33.0, 37.0]', '(28.0, 33.0]', '(23.0, 28.0]', '(23.0, 28.0]', '(37.0, 42.0]', '(28.0, 33.0]', '(33.0, 37.0]', '(23.0, 28.0]', '(28.0, 33.0]', '(23.0, 28.0]', '(28.0, 33.0]', '(37.0, 42.0]', '(28.0, 33.0]', '(42.0, 47.0]', '(28.0, 33.0]', '(23.0, 28.0]', '(23.0, 28.0]', '(23.0, 28.0]', '(56.0, 61.0]', '(18.0, 23.0]', '(42.0, 47.0]', '(28.0, 33.0]', '(28.0, 33.0]', '(23.0, 28.0]', '(61.0, 66.0]', '(33.0, 37.0]', '(37.0, 42.0]', '(23.0, 28.0]', '(42.0, 47.0]', '(28.0, 33.0]', '(23.0, 28.0]', '(33.0, 37.0]', '(23.0, 28.0]', '(37.0, 42.0]', '(56.0, 61.0]', '(23.0, 28.0]', '(18.0, 23.0]', '(47.0, 51.0]', '(33.0, 37.0]', '(51.0, 56.0]', '(23.0, 28.0]', '(33.0, 37.0]', '(28.0, 33.0]', '(33.0, 37.0]', '(23.0, 28.0]'],
        'Values': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
        'Class': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]}

data = pd.DataFrame(data, columns=['Age','Age Bin', 'Values', 'Class'])

fig = plt.figure(figsize=(10,5))
sns.boxplot(x='Age Bin', y="Values", hue='Class', data=data)
plt.xticks(rotation=45)

这会产生以下图:

在此处输入图片说明

可以看出,x 轴上的值不是按递增顺序排列的。 我该如何解决?

您可以根据此处找到的文档设置轴的顺序。

在这种情况下,您可以通过对 bin 数据执行pd.value_counts来设置顺序,按索引对其进行排序,然后像这样抓取索引:

order_agebin = pd.value_counts(data['Age Bin']).sort_index().index

然后只需修改您的sns.boxplot()部分如下:

sns.boxplot(x='Age Bin', y="Values", hue='Class', data=data, order = order_agebin)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM