Matplotlib pcolormesh如何绘制带时间x轴与布尔采样着色的图
解决方法
核心问题原因
pcolormesh默认使用shading='flat'渲染模式,要求传入的X轴网格边界数量比数据列数多1,你两种写法的问题分别是:
- 第一种传入的
all_days长度和数据列数一致,缺少最后一个边界,导致着色错位 - 第二种没有传入X轴参数,matplotlib默认使用数组索引作为刻度,无时间标签
可直接运行的正确代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成测试数据 all_days = pd.date_range("2001-01-01", "2020-12-31", freq="D") times = all_days[::10] arr = np.isin(all_days, times).reshape(1, -1) # 渲染图表:指定shading参数适配点与网格的对应关系 plt.pcolormesh(all_days, [0, 1], arr, shading='nearest') # 隐藏无意义的y轴刻度 plt.yticks([]) # 自动格式化x轴时间标签,避免重叠 plt.gcf().autofmt_xdate() plt.show()
代码修改说明
- 新增
shading='nearest'参数:让每个数据点直接对应一个独立颜色块,不需要额外补充网格边界 - Y轴传入
[0, 1]匹配单行数据的渲染高度范围 - 额外添加的
yticks([])和autofmt_xdate()为可选优化,可根据实际显示需求调整
内容的提问来源于stack exchange,提问作者Tommy Lees
相关产品推荐
相关产品推荐

