2017-02-25 69 views
0

我使用matplotlib.pyplot.pcolor绘制二维网格类似如下:用Python的matplotlib,如何绘制用pcolor创建的单元格中心的一个点?

PL.pcolor(array, cmap = PL.cm.YlOrRd, vmin = 0, vmax = 3) 

哪里array只是一个简单的二维数组。这部分工作正常。但接下来我尝试:

PL.hold(True) 
PL.scatter(x, y, 'blue') 
PL.hold(False) 

xy是我想要一个给定的点被绘制的坐标。然而,点不是绘制在与pcolor一起绘制的网格单元的中心,而是到达单元格的角落(无论选择哪个单元格)。

+1

能否请您分享更多的代码,所以我们有一个比较清晰的起点? – Abdou

+0

@Abdou当然,但它确实简单地调用'pcolor'然后'scatter'。但是,是的,我会更新 – Andy

回答

2

您可以使用meshgrid来生成点的网格。如果您的采样x和y是均匀的,那么只需在每个方向上加上分隔2。即,如果分离是1,再加入0.5和减1分:

import numpy as np 
import matplotlib.pyplot as plt 
r = np.arange(10) 
p = np.arange(10) 
R,P = np.meshgrid(r,p) 
data = np.random.random((10,10)) 
plt.pcolor(R,P,data) 
plt.scatter(R[:-1,:-1]+0.5,P[:-1,:-1]+0.5, color = 'blue') 

enter image description here

这是如果你使用tripcolor: 你可以计算你点的质心:triang.triangles给你三点每个三角形的索引,然后使用这三个点计算质心。即centroidX = (x1+x2+x3)/3.; centroidY = (y1+y2+y3)/3.;

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.tri as tri 
x = np.random.random(10) 
y = np.random.random(10) 
z = np.random.random(10) 
triang = tri.Triangulation(x, y) 
plt.tripcolor(triang,z) 
centroidX = [x[i].sum()/3. for i in triang.triangles] 
centroidY = [y[i].sum()/3. for i in triang.triangles] 
plt.scatter(centroidX,centroidY, color = 'blue') 

enter image description here

+0

谢谢你的答案,但我不明白三角形与我所问的相关。我的意思是,在我的问题中,如上所述,我只是用“pcolor”绘制了一个2D网格,并希望散点图在这些网格中居中。 – Andy

+0

那么,那么你的文本是什么意思:通过使用'matplotlib.pyplot.tripcolor' –

+0

我看到了什么困惑。对于这个问题,我特别使用'pcolor',而不是'tripcolor'。我只是误解了这个问题。有趣的是,思考,你的回答 - 虽然没有解决我目前在这个问题上的问题 - 实际上帮助了我的另一部分程序,我不得不做一些与Voronoy三角测量有关的事情。非常感谢! – Andy

相关问题