pcolormesh 为每个数据点/图块勾选中心

问题描述 投票:0回答:2

我有一些 z=f(x,y) 数据,我想在热图中显示。所以我使用

np.meshgrid
创建一个 (x,y) 网格,然后调用
pcolormesh
。然而,与数据点相对应的每个“图块”的刻度并不居中——在文档中,我没有找到任何关于如何将每个图块的刻度居中的说明,以便我可以立即读出相应的值。有什么想法吗?

例如,在所附图像中,不清楚该刻度对应于哪个 x 值。

Ticks

python numpy matplotlib plot heatmap
2个回答
6
投票

在 pcolormesh 中,网格由边缘值定义。在以下示例中,左下角的值 6 是每个维度中 0 到 1 之间的值。我想这对于每个人来说都是完全可以理解的。

enter image description here

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.arange(5)
y = np.arange(3)
X,Y = np.meshgrid(x,y)
Z = np.random.randint(1,9, size=(2,4))

plt.pcolormesh(X,Y,Z)

plt.show()

现在,如果您只想(仅)在单元格中间有刻度,您可以按如下方式设置它们

plt.xticks(x[:-1]+0.5)
plt.yticks(y[:-1]+0.5)

enter image description here

如果左下像素实际上对应的不是0到1之间的数据,而是at0的数据,则网格是‘错误’;解决方案是将其平移像素宽度的一半来修复它。

plt.pcolormesh(X-0.5,Y-0.5,Z)

enter image description here

如上所述,可以使用

plt.xticks
将刻度调整为仅显示某些数字。


0
投票

这样就解决了问题

https://github.com/horowitz-lab/centered-heatmap

(我写了这段代码。)

© www.soinside.com 2019 - 2024. All rights reserved.