Matplotlib: Wie mache ich ein Kontur?

Ich habe eine Funktion, die ich ein Kontur-Plot machen mixed_model_pdf([[x,y]]) : mixed_model_pdf([[x,y]]) .

Es nimmt Punkte von [x,y] , anstelle von X, Y separat als Eingabe. Das heißt, mixed_model_pdf([[-5,-5]]) oder mixed_model_pdf([[-5,-5],[-5,-4]])

Aber um plt.contourf(X, Y, Z) zu tun, sollte der Z Wert in einer bestimmten Reihenfolge platziert werden, wie kann ich das machen?

Jetzt kann ich damit weitermachen:

 X = Y = np.arange(-30, 31, 1) N, M = len(X), len(Y) Z = np.zeros((N, M)) for i, (x,y) in enumerate(product(X,Y)): Z[np.unravel_index(i, (N,M))] = mixed_model_pdf([[x,y]]) Z = ZT X, Y = np.meshgrid(X, Y) # Plot 2d prob density fig, ax = plt.subplots(figsize=(8, 8), dpi=80) ax.set_aspect('equal') plt.contourf(X, Y, Z, 10, alpha=.75, cmap='jet') 

Aber das sieht wirklich hässlich aus, es transpose das Z und benötigt noch X, Y = np.meshgrid(X, Y) .

Was wäre ein besserer Weg, es zu tun?

AKTUALISIEREN:

Jetzt kann ich den Code viel deutlicher machen:

 X = Y = np.arange(-30, 31, 1) XX,YY=np.meshgrid(x,y) coords=np.array((XX.ravel(), YY.ravel())).TZ = mixed_model_pdf(coords).reshape(61,61) fig, ax = plt.subplots(figsize=(8, 8), dpi=80) ax.set_aspect('equal') plt.contourf(X, Y, Z, 10, alpha=.75, cmap='jet') 

Aber wie kann ich die .reshape() verkürzen? Es wird aus Y = np.arange(-30, 31, 1) berechnet, und ich denke, es kann automatisiert werden?

  • Zwei benachbarte Symbole in Matplotlib Legende
  • Styling von Pandas groupby boxplots
  • Plotten nur oberes / unteres Dreieck einer Hitzewelle
  • Wie man zwei Schieberegler in Matplotlib macht
  • Animation von Köcher in Matplotlib
  • Farbige Mesh-Plot einer Funktion in Python
  • One Solution collect form web for “Matplotlib: Wie mache ich ein Kontur?”

    Meine Kommentare in einer Antwort zu sammeln.

    Sie können plt.contourf auf unterschiedliche Weise anrufen. Die docs machen das deutlich:

    X und Y müssen beide 2-D mit der gleichen Form wie Z sein, oder sie müssen beide 1-D sein, so dass len (X) die Anzahl der Spalten in Z ist und len (Y) die Anzahl der Zeilen in Z ist.

    Sie können die docs aus der interaktiven Python-Eingabeaufforderung erhalten:

     >>> help(plt.contourf) 

    Oder, wenn Sie IPython (Notebook) verwenden, wie Sie sollten;):

     In [1]: plt.contourf? 

    Sie können:

     Z = mixed_model_pdf(coords).reshape(Y.size, Y.size) 

    Zu vermeiden harte codierung der 61 .

    Python ist die beste Programmiersprache der Welt.