Python绘制图表时以日期为索引对x轴进行排序的问题咨询
问题解决:matplotlib绘制控制图X轴日期不排序
核心原因
你遇到的问题来自两个常见的隐式逻辑坑:
- 从SQL Server通过pyodbc拉取数据时,日期类型常被默认转为字符串返回,pandas不会自动识别为datetime格式,设置为索引后也是字符串索引,排序逻辑为字典序而非时间序
- SQL查询返回的结果集默认不一定按日期列正序排列,就算索引是datetime类型,顺序和原结果集一致也会导致X轴乱序
解决代码(仅需修改设置索引部分,完全兼容现有逻辑)
将你原代码中设置索引的行:
df_ED_lastMonth.set_index('departure_ED_ADU', inplace=True)
替换为以下3行即可,无需额外遍历日期数组、也无需修改其他业务逻辑:
# 显式将日期列转换为pandas datetime格式 df_ED_lastMonth['departure_ED_ADU'] = pd.to_datetime(df_ED_lastMonth['departure_ED_ADU']) # 设置为索引 df_ED_lastMonth.set_index('departure_ED_ADU', inplace=True) # 按时间索引升序排序 df_ED_lastMonth.sort_index(inplace=True)
可选优化(X轴日期显示更规整)
如果需要调整X轴日期显示格式,可以放开你原有注释的mdates相关配置,在plt.xticks(rotation=45)后添加以下代码:
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

