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

如何设置matplotlib的pcolormesh热力图刻度标签居中对齐对应色块

问题解决方法

问题根源

pcolormesh的默认轴刻度由matplotlib自动生成,不会默认仅展示你传入的坐标对应刻度,也不会自动对齐到色块中心:

  • 官方示例里的x/y是等间隔均匀分布,matplotlib自动生成的刻度刚好和你的坐标重合,所以看起来效果正常
  • 自定义数据如果间隔特殊或者数量少,自动生成的刻度就会和预期不符,还会出现多余刻度

解决方案

直接手动指定刻度位置和标签即可,不需要修改pcolormesh的核心参数,修改后的完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

data = pd.DataFrame(index=[0, 0.25, 0.5], data={0: [31.40455938, 101.43291831, 101.67128077], 0.25: [31.40455938, 89.81448724, 99.65066293], 0.5: [31.40455938, 57.01406046, 101.47536496]})
x = data.columns.astype(np.float64).to_numpy()
y = data.index.astype(np.float64).to_numpy()
z = data.to_numpy()
cmap = LinearSegmentedColormap.from_list('G2R', ["green", "red"])
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z, shading='auto', cmap=cmap, edgecolors='w', linewidths=0.5, vmin=0, vmax=100)
# 新增两行手动设置刻度,即可实现居中对齐+仅展示指定刻度
ax.set_xticks(x)
ax.set_yticks(y)
# 如果需要自定义标签(比如字符串标签),再加下面两行替换即可
# ax.set_xticklabels(['标签1', '标签2', '标签3'])
# ax.set_yticklabels(['标签A', '标签B', '标签C'])
ax.set_title('expected effect')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()

字符串刻度处理逻辑

如果你的刻度是字符串类型(比如分类标签),只需要先传入和标签数量一致的整数作为x/y坐标,再替换刻度标签即可,示例如下:

# 假设x轴标签是["样本1", "样本2", "样本3"],y轴标签是["组A", "组B", "组C"]
x = np.arange(3)
y = np.arange(3)
z = np.random.rand(3,3)
fig, ax = plt.subplots()
ax.pcolormesh(x, y, z, shading='auto', edgecolors='w')
ax.set_xticks(x)
ax.set_xticklabels(["样本1", "样本2", "样本3"])
ax.set_yticks(y)
ax.set_yticklabels(["组A", "组B", "组C"])
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:09:02