You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:05:21