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

如何沿X轴平移matplotlib中pcolor绘制的热力图?

解决pcolor热力图X轴平移及坐标轴范围问题

一、将热力图右移至X=2的位置

pcolor支持直接指定单元格的边缘坐标,默认X轴范围是[0, Z.shape[1]](示例中Z为6行5列,默认X范围0-5)。要让热力图从X=2开始,需构造对应X边缘数组:

  • 由于Z有5列,X需要6个边缘点(列数+1),范围从2到2+5=7,即X = np.arange(2, 2 + Z.shape[1] + 1)

修改后的代码:

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(0)
Z = np.random.rand(6, 5)

tk = list(range(0,10+1))

fig, ax = plt.subplots(figsize=(7.2, 2.3))

# 构造X轴边缘坐标,从2开始覆盖5列的宽度
X = np.arange(2, 2 + Z.shape[1] + 1)
ax.pcolor(X, Z=Z)  # Y轴可默认,也可同理自定义范围
ax.set_xticks(tk)

plt.show()

运行后热力图会从X=2延伸至X=7,符合平移需求。

二、调换set_xticks与pcolor顺序后X轴收缩的原因

这是matplotlib坐标轴自动缩放机制导致的:

  1. 先调用ax.set_xticks(tk)仅设置了待显示的刻度,但未固定坐标轴范围。
  2. 接着调用ax.pcolor(Z)时,pcolor会根据默认X范围(0-5)触发自动缩放(autoscale_on默认开启),自动将X轴范围调整为匹配热力图的实际显示区域[0,5],超出该范围的刻度会被隐藏,因此X轴看起来收缩到了[0,5]。

反之,先调用pcolor会先把X轴范围固定为[0,5],后续set_xticks仅添加额外刻度,不会改变已确定的坐标轴范围,所以X轴会显示0-10的刻度,但热力图仍处于0-5区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:50:17