Matplotlib中折线图变为散点图的原因及修复方法
CPI折线图后期变为散点的问题解析与修复
原因分析
- 日期序列未按时间升序排列:若2019年后的日期是乱序的,matplotlib会严格按照DataFrame的行顺序连接数据点,导致折线交叉断裂,视觉上呈现散点状
CPI列存在缺失值(NaN):matplotlib绘制折线时,遇到缺失值会直接中断折线,后续数据点只能单独显示为散点- 日期格式转换异常:部分日期转换失败,导致对应数据的x轴坐标无效,无法参与连续折线的绘制
修复方案
1. 排查数据问题
先执行以下代码确认问题根源:
# 查看数据基本信息 print(data.info()) # 统计日期重复/缺失、CPI缺失数量 print(f"重复日期数: {data['Date'].duplicated().sum()}") print(f"缺失日期数: {data['Date'].isna().sum()}") print(f"CPI缺失值数: {data['CPI'].isna().sum()}")
2. 标准化日期与排序
确保日期有效且按时间顺序排列:
# 转换日期格式,过滤转换失败的行 data['Date'] = pd.to_datetime(data['Date'], errors='coerce') data = data.dropna(subset=['Date']) # 按日期升序排序,重置索引 data = data.sort_values('Date').reset_index(drop=True)
3. 处理CPI缺失值
根据需求选择合适的缺失值处理方式:
# 前向填充(沿用前一个月数据,保留趋势) data['CPI'] = data['CPI'].ffill() # 或后向填充 # data['CPI'] = data['CPI'].bfill() # 或删除含缺失值的行 # data = data.dropna(subset=['CPI'])
4. 完整修复代码
整合所有步骤的可执行代码:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 读取数据 data = pd.read_csv('normalizedData.csv') # 日期处理 data['Date'] = pd.to_datetime(data['Date'], errors='coerce') data = data.dropna(subset=['Date']) data = data.sort_values('Date').reset_index(drop=True) # 缺失值处理 data['CPI'] = data['CPI'].ffill() # 绘图优化 plt.figure(figsize=(12, 6)) plt.plot(data['Date'], data['CPI'], label='CPI', marker='o', markersize=6) # 格式化x轴日期 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) plt.xticks(rotation=45) # 图表标注 plt.title('Time Series Indicators') plt.xlabel('Date') plt.ylabel('Values') plt.legend() plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

