如何修改Python折线图的x轴为按时间排序的年月显示格式
你代码的核心问题是将年月处理为了浮点数值,导致x轴显示为小数而非可读的年月格式,调整方案如下:
修改后代码
import pandas as pd import matplotlib.pyplot as plt def graph_s(self): if len(self.sheet) > 1: # 组合年月为datetime时间类型 self.sheet['date'] = pd.to_datetime(self.sheet[['Year', 'Month']].assign(day=1)) # 按日期从旧到新升序排列 self.sheet = self.sheet.sort_values('date', ascending=True) # 计算月度总支出 self.sheet['total_expense'] = self.sheet[['grocery', 'transportation', 'leisure', 'utilities', 'savings', 'bills']].sum(axis=1).astype(float) # 绘图 plt.plot(self.sheet['date'], self.sheet['total_expense']) # 可选:旋转x轴标签避免文字重叠 plt.xticks(rotation=45) plt.tight_layout() plt.show() else: # 可替换为中文提示:print('抱歉!数据量不足,无法生成随时间变化的支出折线图。') print('Sorry! There is not enough information to create a graph of you spending over time.')
核心修改说明
- 取消原本把年月转为「年份+月份/12」浮点数值的逻辑,改为生成pandas原生datetime时间类型,matplotlib可自动识别该类型,x轴默认按时间先后排序,且直接显示可读的年月格式
- 替换低效的
iterrows遍历逻辑,用pandas向量化运算实现排序、求和,性能更高、代码更简洁 - 新增x轴标签旋转配置,避免年月文字过长重叠
原错误运行效果参考


内容的提问来源于stack exchange,提问作者user21
相关产品推荐
相关产品推荐

