我正在绘制我的数据集(英格兰和威尔士的死亡率与地区的关系),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'])
最佳答案
如上所述,使用 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/