如何更改分类 x 轴的绘图顺序

use*_*224 3 python python-3.x pandas seaborn

我得到了一个如下所示的数据框:

df:

Time of Day Season  value
Day        Shoulder 30.581606
Day        Summer   25.865560
Day        Winter   42.644530
Evening    Shoulder 39.954759
Evening    Summer   32.053458
Evening    Winter   53.678297
Morning    Shoulder 32.171245
Morning    Summer   25.070815
Morning    Winter   42.876667
Night      Shoulder 22.082042
Night      Summer   17.510290
Night      Winter   33.262356
Run Code Online (Sandbox Code Playgroud)

我正在使用 seaborn 使用以下代码绘制线图中的值:

g = sns.lineplot(x='Time of Day',y='value',data=df,hue='Season')
Run Code Online (Sandbox Code Playgroud)

它生成以下图形:

在此处输入图片说明

该图的问题在于 x 轴的顺序不是所需的顺序。我想将 a 轴值的顺序更改为 ['Morning', 'Day','Evening','Night']。我尝试使用以下命令更改它:

g.set_xticklabels(['Morning','Day','Evening','Night'])
Run Code Online (Sandbox Code Playgroud)

但是这个命令只改变x轴的标签,而不是数据点的顺序。有人能帮我解决这个问题吗?

Tre*_*ney 6

设置数据框中的分类顺序Time of Day

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

data = {'Time of Day': ['Day', 'Day', 'Day', 'Evening', 'Evening', 'Evening', 'Morning', 'Morning', 'Morning', 'Night', 'Night', 'Night'],
        'Season': ['Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter', 'Shoulder', 'Summer', 'Winter'],
        'value': [30.581606, 25.865560000000002, 42.644529999999996, 39.954759, 32.053458, 53.678297, 32.171245, 25.070815, 42.876667, 22.082042, 17.510289999999998, 33.262356]}

# create dataframe
df = pd.DataFrame(data)

# set categorical order
df['Time of Day'] = pd.Categorical(df['Time of Day'],
                                   categories=['Morning', 'Day', 'Evening', 'Night'],
                                   ordered=True)

# plot
g = sns.lineplot(x='Time of Day', y='value', data=df, hue='Season')
plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明