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

2024-03-29 08:12:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制我的数据集(英格兰和威尔士地区的死亡率),X轴上的日期按字母顺序排序。4月6日,4月7日,…,2月6日,2月7日,…,9月13日,9月14日

我希望它们按时间顺序排列(就像在我的数据集中一样),有没有办法关闭强制排序?我使用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


Tags: and数据代码datadatewestsoutheast
2条回答

除了熔化,您还可以创建一个pd.MultiIndex来根据需要使用matplotlib自动plot

Regional['Date'] = pd.to_datetime(Regional['Date'])
Regional = Regional.set_index('Date')
Regional.columns = pd.MultiIndex.from_tuples([('Region', col) for col in Regional.columns])
Regional.plot(ax=ax, title='Daily Mortality Rate by Region', ylabel='Mortality')
plt.legend(title='Regions', labels=[col[1] for col in Regional.columns])

{}方法(参见其他答案)稍微干净一些,但这只是一个{}解决方案

如前所述,使用^{}和datetime格式可能会解决您的问题。您可以使用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')

相关问题 更多 >