Python绘图强制按字母顺序而不是按时间顺序对日期进行排序

标签 python pandas matplotlib time-series seaborn

我正在绘制我的数据集(英格兰和威尔士的死亡率与地区的关系),X 轴上的日期继续按字母顺序排序。日期为 4 月 6 日、4 月 7 日、...、2 月 6 日、2 月 7 日、...、2013 年 9 月、2014 年 9 月。

我希望它们按时间顺序排列(就像在我的数据集中一样)有什么方法可以关闭强制排序吗?我正在使用 matplot lib 和 seaborn 来绘制此图。

此外,如果有人知道如何编写此代码而不重复代码 13 次,我会很高兴听到它。

我的代码如下

plt.figure(figsize=(48,12))

sns.lineplot(data=Regional,x='Date',y='England and Wales')
sns.lineplot(data=Regional,x='Date',y='England')
sns.lineplot(data=Regional,x='Date',y='North East')
sns.lineplot(data=Regional,x='Date',y='North West')
sns.lineplot(data=Regional,x='Date',y='Yorkshire and the Humber')
sns.lineplot(data=Regional,x='Date',y='East Midlands')
sns.lineplot(data=Regional,x='Date',y='West Midlands')
sns.lineplot(data=Regional,x='Date',y='East of England')
sns.lineplot(data=Regional,x='Date',y='Greater London')
sns.lineplot(data=Regional,x='Date',y='South East')
sns.lineplot(data=Regional,x='Date',y='South West')
sns.lineplot(data=Regional,x='Date',y='Wales')
sns.lineplot(data=Regional,x='Date',y='Non Residents')

plt.legend(['England and Wales','England','North East','North West','Yorkshire and the Humber','East Midlands','West Midlands','East of England','Greater London','South East','South West','Wales','Non Residents'])

Plot

最佳答案

如上所述,使用 pd.melt和日期时间格式可能会解决您的问题。您可以使用 pd.to_datetime 将日期转换为日期时间格式。假设您的字符串为 'Jul-06' 格式,您可以指定格式为 '%b-%y'。否则,你可以检查这个table以获得正确的格式说明符。

pd.melt 可以重新格式化您的数据框以使用单行代码进行绘图。假设您的数据框仅包含日期和区域的列,您可以使用以下代码将所有内容组合在一起:

Regional['Date'] = pd.to_datetime(Regional['Date'], format='%b-%y')
Regional = pd.melt(Regional, id_vars=['Date'], var_name='Region', value_name='Mortality')
sns.lineplot(data=Regional, x='Date', y='Mortality', hue='Region')

关于Python绘图强制按字母顺序而不是按时间顺序对日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65332885/

相关文章:

python - 使用带有secondary_y的Seaborn + Pandas绘图时如何摆脱网格线

python - 为什么 matplotlib 动画只能在交互式 session 中工作?

python - 如何为子图中的人物制作动画?

python - 尝试用 python 更快地渲染 ASCII 艺术

python - python 包安装位置与前缀不一致

python - Striptime Python 部分匹配

python - 匹配子串和字符串的列表,匹配则返回子串

python - 在 Python 类中使用鼠标事件回调

Pandas DataFrames 在 Spyder 4 中与新的对象资源管理器一起显示

python - 计算两个流程步骤之间的平均天数