三维散点图值的热图(Python)

1 投票
1 回答
1809 浏览
提问于 2025-04-17 12:12

这看起来是个简单的任务,或者说是重复的问题,但请耐心听我说——我搜索了一段时间,还是没找到简单的答案。

我有一个散点图,想把它显示成热图。我的数据看起来是这样的:

{ (3, 3): 1.7314, (3,4):-6.99, (4,3):-17.3, (4, 4):-100.0 }

我想从单元格 (3,3) 开始显示一个矩阵,这个单元格的亮度是 1.7314,等等。

我发现有几个问题和答案是关于给出二维元组的列表 (X, Y) 和每个点的 Z 值(强度),这个值是根据 (x, y) 周围的出现次数来计算的。

我也用过 imshow 来绘制这样的图,但在使用 imshow 时,你会忽略 (3,3) 这样的点,所以图形可能会出现奇怪的偏移。一个选择是使用 imshow 然后手动调整坐标轴的标签。但我觉得一定有在这方面找到了解决办法,而不是过多地修改 pylab

那么,最好的方法是什么呢?

1 个回答

2

好的,让我们用你的示例数据来做个简单的例子:

import numpy as np
from pylab import * 

data = { (3, 3): 1.7314, (3,4):-6.99, (4, 3):-17.3, (4, 4):-100.0 }
matrix = np.zeros((5, 5))
for (x, y), z in data.items():
    matrix[y,x] = z

imshow(matrix[3:, 3:], origin='lower', interpolation='none', extent=[2.5, 4.5, 2.5, 4.5])
show()

如你所见,你可以通过设置extent来控制坐标轴的范围。如果你不设置(也就是None),默认的范围会是(-0.5, numcols-0.5, -0.5, numrows-0.5),这表示左边、右边、底部和顶部的边界。如果你想把origin放在底部,那么Y轴的设置就是这样。

另外,interpolation='none'在你的情况下也很重要。

撰写回答