在 seaborn 散点图中对分类 x 轴进行排序

Gun*_*Gun 1 python matplotlib scatter-plot pandas seaborn

我正在尝试使用 seaborn 散点图在数据框中绘制前 30% 的值,如下所示。

在此处输入图片说明

同一图的可重现代码:

import seaborn as sns

df = sns.load_dataset('iris')

#function to return top 30 percent values in a dataframe.
def extract_top(df):
    n = int(0.3*len(df))
    top = df.sort_values('sepal_length', ascending = False).head(n)

    return top

#storing the top values
top = extract_top(df)

#plotting
sns.scatterplot(data = top,
                x='species', y='sepal_length', 
                color = 'black',
                s = 100,
                marker = 'x',)
Run Code Online (Sandbox Code Playgroud)

在这里,我想对 x 轴进行排序order = ['virginica','setosa','versicolor']。当我尝试order用作 中的参数之一时sns.scatterplot(),它返回了一个错误AttributeError: 'PathCollection' object has no property 'order'。正确的做法是什么?

请注意:在数据框中,setosa也是 中的一个类别species,但是,在前 30% 的值中,其值的非下降。因此,该标签未显示在顶部可重现代码的示例输出中。但我甚至希望 x 轴上的标签也按照给定的顺序排列,如下所示:

在此处输入图片说明

Diz*_*ahi 5

scatterplot()不是这项工作的正确工具。由于您有一个要使用的分类轴,stripplot()而不是scatterplot(). 在此处查看关系图和分类图之间的区别https://seaborn.pydata.org/api.html

sns.stripplot(data = top,
              x='species', y='sepal_length', 
              order = ['virginica','setosa','versicolor'],
              color = 'black', jitter=False)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明