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

pcolormesh绘制非规则间隔数据时bin显示不符合预期

解决pcolormesh非规则间隔数据的色块边界匹配问题

你的问题出在pcolormesh的输入逻辑匹配错误上:这个函数要求x、y边界数组的长度必须比对应数据维度多1——因为x/y数组定义的是色块的边界,而数据数组的每个值对应一个由相邻边界围成的矩形色块。你的代码里边界长度和数据维度完全不匹配,导致绘图混乱。

问题拆解

你提供的:

  • x边界数组[20,30,40](长度3),对应数据列数应该是3-1=2,但你的数据有3列;
  • y边界数组[1,2,5,6,12,13](长度6),对应数据行数应该是6-1=5,但你的数据有6行;

这种维度不匹配直接导致色块的位置和你预期的完全不符。

修正方案

按照你的预期,我们需要让每个数据行对应一个y区间(比如[1,2]、[2,5]等),每个数据列对应一个x区间。调整边界数组长度,使其满足边界数=数据维度+1即可:

import matplotlib.pyplot as plt
import numpy as np

cmap = plt.cm.jet
fig, ax = plt.subplots(figsize=(10,8))

# 修正边界:y边界增加一个结束值(比如14),对应6行数据的6个y区间
y_bounds = [1, 2, 5, 6, 12, 13, 14]
# 若要对应3列数据,x边界需要4个值(这里按你预期的标签扩展一个结束值50)
x_bounds = [20, 30, 40, 50]

cax = ax.pcolormesh(x_bounds, y_bounds, 
                    np.array([[1,2,5], # 对应y区间1-2
                              [0,2,0], # 对应y区间2-5
                              [1,2,3], # 对应y区间5-6
                              [2,2,0], # 对应y区间6-12
                              [3,2,3], # 对应y区间12-13
                              [4,2,0]]), # 对应y区间13-14
                    cmap=cmap, alpha=1)

# 设置x轴标签为你需要的原始标签
ax.set_xticks([20,30,40])
# 设置y轴标签为所有边界值,清晰展示区间
ax.set_yticks(y_bounds)

cbar = fig.colorbar(cax)
cbar.ax.tick_params(labelsize=12) 
plt.show()

额外调整(可选)

如果希望x标签对应色块的中心位置(更贴合“x数据代表标签”的描述),可以把x边界改成[15,25,35,45],这样每个色块的中心正好是20、30、40,再设置ax.set_xticks([20,30,40])即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:53:15