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

matplotlib 3.5.3中plt.scatter对datetime数据不遵循掩码规则

Matplotlib 3.5.3中scatter显示掩码数组数据的问题解决

在matplotlib 3.5.3版本中,使用numpy掩码数组结合datetime列表绘图时,plt.plot会自动忽略被掩码的数据点,表现符合预期,但plt.scatter却会绘制被掩码的点,仅轴限计算能正确排除掩码值。即使将时间序列也转为相同掩码的数组,问题依然存在。

问题原因

这是matplotlib 3.5.3版本的已知bug:scatter函数未正确处理numpy掩码数组的掩码标识,而plot函数的掩码逻辑是正常的。

解决方法

方法1:手动过滤掩码数据

提取未被掩码的时间点和数据点,再传入scatter函数:

import matplotlib.pyplot as plt
import numpy.ma as ma
from datetime import datetime

time_unmasked = [datetime(2022, 11, 24, 4, 49, 52),
                 datetime(2022, 11, 24, 4, 49, 53),
                 datetime(2022, 11, 24, 4, 49, 54),
                 datetime(2022, 11, 24, 4, 49, 55),
                 datetime(2022, 11, 24, 4, 49, 56),
                 datetime(2022, 11, 24, 4, 49, 57),
                 datetime(2022, 11, 24, 4, 49, 58)]

data_masked = ma.array([15,14,50,15,15,15,16], mask=[0,0,1,1,1,0,0])

# 提取未掩码的索引
valid_indices = ~data_masked.mask
# 过滤时间和数据
valid_times = [t for t, valid in zip(time_unmasked, valid_indices) if valid]
valid_data = data_masked[valid_indices]

# 散点图(符合预期,不显示掩码点)
plt.scatter(valid_times, valid_data)
plt.show()

方法2:升级matplotlib版本

该bug在matplotlib 3.6及以上版本中已被修复,升级后直接运行原代码即可让scatter自动忽略掩码数据:

pip install --upgrade matplotlib>=3.6

内容的提问来源于stack exchange,提问作者Ben Pickering

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:35:33