如何避免10万行时间序列数据绘图时出现重叠问题?
解决Matplotlib绘制大体积时间序列数据的异常问题
问题根源
10万行数据里存在同一时间点对应多个energy值,Matplotlib的plot函数会按数据顺序连接所有点,同一x坐标(时间点)上的多个y值会被来回连线,导致图形混乱;而1000行数据要么没有重复时间点,要么重复量少到视觉上不明显,所以显示正常。
具体解决办法
- 方法1:聚合同一时间点的数值(最常用)
如果同一时间点的多个energy值是重复采集或需要合并的,先按时间分组做聚合处理(均值、求和、最值都可以,根据业务需求选):
# 按day分组计算energy均值,也可替换成sum/max/min agg_df = x_df.groupby('day')['energy'].mean().reset_index() plt.figure(figsize=(50,25)) plt.xticks(fontsize=30) plt.plot(agg_df['day'], agg_df['energy'])
- 方法2:用散点图展示原始数据
如果需要保留所有原始数据点,不想做聚合,换成散点图避免连线混乱,还能调整点大小减少重叠:
plt.figure(figsize=(50,25)) plt.xticks(fontsize=30) plt.scatter(x_df['day'], x_df['energy'], s=10)
- 方法3:清理重复时间点数据
如果同一时间点的多个值是数据错误导致的,直接去重(保留每个时间点的第一条数据,规则可自定义):
# 保留每个day对应的第一条数据,keep='last'则保留最后一条 clean_df = x_df.drop_duplicates(subset='day', keep='first') plt.figure(figsize=(50,25)) plt.xticks(fontsize=30) plt.plot(clean_df['day'], clean_df['energy'])
内容的提问来源于stack exchange,提问作者wollymolly
相关产品推荐
相关产品推荐

