三维散点图值的热图(Python)
这看起来是个简单的任务,或者说是重复的问题,但请耐心听我说——我搜索了一段时间,还是没找到简单的答案。
我有一个散点图,想把它显示成热图。我的数据看起来是这样的:
{ (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'
在你的情况下也很重要。