如何按升序对 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 轴进行排序?的主要内容,如果未能解决你的问题,请参考以下文章