平均值的热力图

1 投票
1 回答
1765 浏览
提问于 2025-04-18 09:11

我想制作一个“热力图”,图中的颜色代表每个区域内某个第三个值的平均值。比如说,x和y的位置,然后是平均的高度。我的问题是,散点和这些区域的框并不总是重叠(通常是左上角)。我是不是漏掉了什么简单的东西?有没有更好的方法?

这里有一些示例代码,展示了我的问题。使用的是Ipython --pylab

from scipy import stats
x=randint(0,50,60 )
y=randint(0,65,60 )
z=randint(0,20,60)
d = stats.binned_statistic_2d(x, y, z)
extent = [d[1][0], d[1][-1], d[2][0], d[2][-1]]
imshow(d[0], cmap='RdBu_r', extent=extent, interpolation='nearest', origin='lower')
scatter(x, y, s=50, c='0.8', edgecolor='0.8')

输出结果:https://i.stack.imgur.com/Yx4iT.png

1 个回答

2

我发现 d[0] 中的 x 方向和 y 方向是反过来的。这可能是 imshow 的问题。所以只需要对数据进行转置(注意在 imshow 中使用了 d[0].T)...

from scipy import stats

x=randint(0,50,60 )
y=randint(0,65,60 )
z=randint(0,20,60)
d = stats.binned_statistic_2d(x, y, z, statistic='mean')
extent = [d[1][0], d[1][-1], d[2][0], d[2][-1]]
imshow(d[0].T, cmap='RdBu_r', extent=extent, interpolation='nearest', origin='lower')
scatter(x,y, s=50, c=z, edgecolor='0.8')

另外,我把 scatter 的第四个参数改成了 c=z,这样你就可以看到散点的实际值了。

撰写回答