2017-02-25 47 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

相關問題