如何沿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坐标轴自动缩放机制导致的:
- 先调用
ax.set_xticks(tk)仅设置了待显示的刻度,但未固定坐标轴范围。 - 接着调用
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
相关产品推荐
相关产品推荐

