如何按月份升序对x轴进行排序?

2022-02-27 00:00:00 python numpy pandas matplotlib seaborn

问题描述

所以我有一个将索引作为DateTime对象的DataFrame。 我已经创建了一个新列来指示DataFrame中的每个"顺风车"位于哪个月:

import numpy as np
import datetime as dt
from datetime import datetime    
months = df.index.to_series().apply(lambda x:dt.datetime.strftime(x, '%b %Y')).tolist()
df['months'] = months
df1 = df[['distance','months']]

这提供了:

当我尝试使用以月份为x轴的海运将其绘制到折线图上时,它会按字母顺序对其进行排序,从4月开始,然后是8月,依此类推。

l = sns.lineplot(x='months',y='distance',data=df1)
plt.xticks(rotation=45)

我真的不明白它为什么要这样做,因为在我使用的数据框中,月份是根据它们的月份按升序排序的。有没有办法让我的x轴从2018年1月开始,到2019年7月结束?


解决方案

x坐标必须是数字。当您提供字符串数组时,Seborn会自动按字母顺序对其排序。您想要的内容可以通过sort=False(默认为True)实现:

# True or omitted
sns.lineplot(x='month', y='distance', data=df1, sort=True)

# Set to False to keep the original order in your DataFrame
sns.lineplot(x='month', y='distance', data=df1, sort=False)

相关文章