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

Posted

技术标签:

【中文标题】如何按升序对 x 轴进行排序?【英文标题】:How do I sort my x-axis by ascending month order? 【发布时间】:2019-12-27 23:40:04 【问题描述】:

所以我有一个索引作为日期时间对象的数据框。 我创建了一个新列来指示数据框中每个“骑行”的月份:

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']]

这给出了:

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

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

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

【问题讨论】:

你试过l = sns.lineplot(x='months',y='distance',data=df1, sort=True)吗? 是的,我有,它不起作用。这很奇怪,因为当我将 sns.countplot(x='months',data=df1) plt.xticks(rotation=45) 与完全相同的数据框一起使用时,它会为我排序。 您已经创建了日期字符串,我猜 seaborn 正在为您排序。相反,保留为日期,并将定位器设置为月份定位器,并将格式化程序设置为日期格式化程序。 matplotlib.org/3.1.1/gallery/text_labels_and_annotations/… 应该让你朝着正确的方向前进 【参考方案1】:

x 坐标必须是数字。当您提供一个字符串数组时,Seaborn 会自动按字母顺序对其进行排序。你想要的可以用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)

【讨论】:

非常感谢!不敢相信我没想到!

以上是关于如何按升序对 x 轴进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何按升序对条形图中的条形进行排序

如何按升序对字典进行排序? [复制]

如何按升序对文件名进行排序?

在组合框中选择升序时如何对元素列表进行排序

如何根据信号强度按升序对 getScanResults() 列表进行排序?

如何在 Reactjs 中按升序或降序对数据进行排序?