2017-02-25 1 views
0

ich matplotlib.pyplot.pcolor bin mit einem 2D-Gitter wie folgt zu zeichnen:Mit Matplotlib für Python, wie ein Punkt in der Mitte von Zellen, die mit Pcolor erstellt wurden, plotten?

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

Wo array nur ein einfacher 2D-Array ist. Dieser Teil funktioniert gut. Aber nächstes versuche ich:

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

Wo x und y die Koordinaten, wo ich ein gegebener Punkt wollen aufgetragen werden. Anstatt jedoch in der Mitte der Zellen des Rasters, das mit pcolor gezeichnet ist, geplottet zu werden, gelangt der Punkt in die Ecke der Zellen (egal, welche Zelle ich wähle).

+1

Können Sie bitte mehr von Ihrem Code teilen, also haben wir einen klareren Ausgangspunkt? – Abdou

+0

@Abdou Sicher Sache, aber es heißt einfach 'pcolor' und dann' streuen'. Aber ja, ich werde aktualisieren – Andy

Antwort

2

Sie können meshgrid verwenden, um das Netz von Punkten zu generieren. Wenn Ihre Stichproben x und y gleich sind, addieren Sie einfach die Teilung geteilt durch zwei in jede Richtung. dh wenn die Trennung 1 ist, dann 0,5 addieren und einen Punkt abziehen:

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

Dieser Fall sind Sie verwenden tripcolor: Sie können den Schwerpunkt Ihrer Punkte berechnen: triang.triangles geben Ihnen die drei Punkte Indizes von jedem Dreieck, dann berechnen Sie den Schwerpunkt mit diesen drei Punkten. das heißt 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

Danke für die Antwort, aber ich sehe nicht, wie die Dreiecke zu dem, was ich fragte, beziehen. Ich meine, in meinen Fragen, wie beschrieben, habe ich einfach ein 2D-Gitter mit "pcolor" geplottet und wollte, dass die Streudiagramme in solchen Zellen zentriert sind. – Andy

+0

Also, was meinst du in deinem Text: mit 'matplotlib.pyplot.tripcolor' –

+0

sehe ich, was die Verwirrung war. Für dieses Problem habe ich gerade "pcolor", nicht "tripcolor" verwendet. Ich habe es aus Versehen auf die Frage übertragen. Lustig genug, dachte ich, Ihre Antwort - obwohl ich mein aktuelles Problem in dieser Frage nicht gelöst habe - half mir tatsächlich mit einem anderen Teil meines Programms, wo ich etwas tun musste, was mit der Voronoy-Triangulation zu tun hatte. Vielen Dank! – Andy

Verwandte Themen