2016-04-26 123 views
0

我有一个包含值和相应坐标的矩阵,并希望为给定坐标绘制该矩阵的热图。一个工作的例子将是带有指定坐标点的热图

import numpy as np 
import matplotlib.pyplot as plt 

intensities=[[1,3,5],[2,4,6]] 

coords=[[[0,0],[1,0],[2,4]],[[2,1],[3,5],[6,1]]] 

plt.pcolormesh(intensities) 

但是,我想要的点绘制在由坐标给出的坐标。不幸的是,坐标不能表示为两个数组。

我可以看出,pcolormesh和类似的工具可能是错误的工具,因为它们用矩形填充。我不关心用于填充空间的多边形的特定形状,因为我将有足够多的点来使效果不可见。

问题出现在尝试后期处理图像。一个图形被绘制为对应于一个非正交的参考系,我希望看到如果参考系是正交的,它会是什么样子。

+0

'强度'如何对应'coords'。你是否打算将'coords'定义为长度为2的4个子列表,如'coords = [[0,0],[1,0],[2,1],[3,5]]' ? (在OP中,前两个子列表周围似乎有太多的括号......) – unutbu

+0

道歉,我现在纠正了这个问题。这意味着coords [a,b,:]给出强度的x,y坐标[a,b]。如果有必要,我还可以找到其他方法来编写这些内容。 – Shinja

回答

0

Per the comments,coords[a, b,:]给出所有有效的a,bintensities[a, b]有关的x,y坐标。因此,我们可以摘掉xy协调与

x = coords[..., 0].ravel() 
y = coords[..., 1].ravel() 

和相应的颜色会由

c = intensities.ravel() 

import numpy as np 
import matplotlib.pyplot as plt 

intensities = np.array([[1, 3, 5], [2, 4, 6]]) 
coords = np.array([[[0, 0], [1, 0], [2, 4]], [[2, 1], [3, 5], [6, 1]]]) 

x = coords[..., 0].ravel() 
y = coords[..., 1].ravel() 
c = intensities.ravel() 
plt.scatter(x, y, c=c, s=200) 
plt.colorbar() 
plt.show() 
给予

enter image description here

s=200控件的大小点。我使用了很大的价值来让示例中的几个点更加明显。如果你有很多积分,你当然会想要一个更小的数字。

+0

如果我在实际情节中将点数足够小,就可以准确显示我想要的结果。 – Shinja