Highcharts堆叠面积图实现x轴为日期时间y轴为产品数量并处理缺失数据的方法
带缺失数据点的堆叠面积图实现方案
前置处理逻辑
- 首先对齐x轴时间维度:将日期列转换为标准datetime类型,按所需粒度(日/周/月等)重采样,保证所有时间刻度在每个产品维度下都有对应条目,缺失的数量值统一设为NaN
- 按需选择缺失值处理方式:如果需要在图中展示缺失段的空白缺口,直接保留NaN即可;如果需要数据平滑衔接,使用时间插值、前向填充等方式补全NaN值
代码实现(Python环境)
基于Pandas + Matplotlib实现,可直接适配你的业务数据:
import pandas as pd import matplotlib.pyplot as plt import numpy as np # 替换为你的实际数据读取逻辑 # 示例数据构造:10天的3类产品数量,含随机缺失值 date_series = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D') df = pd.DataFrame({ 'product_a': [20, 25, np.nan, np.nan, 32, 38, 40, np.nan, 45, 50], 'product_b': [15, np.nan, 18, 22, 25, np.nan, 30, 32, 35, 38], 'product_c': [10, 12, 15, np.nan, 20, 22, np.nan, 25, 28, 30] }, index=date_series) # 可选:需要补全缺失值时取消下一行注释,method可替换为'ffill'(前向填充)、'linear'(线性插值) # df = df.interpolate(method='time') # 绘制堆叠面积图 plt.figure(figsize=(12, 6)) plt.stackplot( df.index, df['product_a'], df['product_b'], df['product_c'], labels=['产品A', '产品B', '产品C'], alpha=0.75 ) # 坐标轴格式调整 plt.xlabel('日期') plt.ylabel('产品数量') plt.xticks(rotation=45) plt.legend(loc='upper left') plt.tight_layout() plt.show()
异常排查说明
之前使用普通折线/面积图无法实现,通常是两个原因:
- 各产品的时间序列未对齐,x轴刻度不统一,导致堆叠计算逻辑错误
- 缺失值未做标准化处理,被默认填充为0或被直接删除,无法展示缺失状态
Matplotlib的stackplot原生支持NaN值,会自动在缺失对应时间段生成空白缺口,无需额外配置即可满足缺失数据的展示需求。如果需要明确标记有效数据点,可额外调用plt.scatter为非NaN值位置添加标记点。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

