Konturen vor der Oberfläche in Matplotlib anzeigen

Ich habe mich um Antworten gekümmert, aber ich kann nicht scheinen zu sehen, warum in meinem Code kann ich nicht die projizierten Konturen zu zeigen, "hinter" der Oberfläche.

from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') X = np.array([[200,800,1500,2000,3000],[200,700,1500,2000,3000],[200,800,1500,2000,3000],[200,800,1500,2000,3000]]) Y = np.array([[50,50,50,50,50],[350,350,350,350,350],[500,500,500,500,500],[1000,1000,1000,1000,1000]]) Z = np.array([[0,0,33,64,71],[44,62,69,74,76],[59,67,72,75,77],[63,68,73,76,77]]) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, alpha=0.5) cset = ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=cm.coolwarm) cset = ax.contourf(X, Y, Z, zdir='x', offset=200, cmap=cm.coolwarm) cset = ax.contourf(X, Y, Z, zdir='y', offset=1000, cmap=cm.coolwarm) ax.set_xlabel('X') ax.set_xlim(200, 3000) ax.set_ylabel('Y') ax.set_ylim(0, 1000) ax.set_zlabel('Z') ax.set_zlim(0, 100) plt.show() 

Ich benutze das eine der gefüllten Konturplots von dieser Seite als Vorlage: http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots

Im Moment war das Beste, was ich bekommen konnte, um den Alpha-Wert der Konturen zu ändern. Ich habe auch versucht, die Oberfläche nach den Konturen zu plotten, aber das hat nichts geändert.

Jeder Rat wäre herzlich willkommen!

  • Parallele Berechnungsaufgabe zu Brute-Force in Python
  • Python Windows `msvcrt.getch ()` erkennt nur jeden 3. Keypress?
  • "Erwartete Art" Union [str, bytearray] 'hat' int 'stattdessen "Warnung in Schreibmethode"
  • Python - Installiere OpenSSL
  • Appstats arbeiten nur für eine WSGIAPlikation
  • Um Zeichenkette in Variablenname zu konvertieren [doppelte]
  • Windows scrapyd-deploy wird nicht erkannt
  • Python 2.7 - ttk-Modul scheinbar nicht in Windows 8.1 funktioniert
  • One Solution collect form web for “Konturen vor der Oberfläche in Matplotlib anzeigen”

    Das Problem, das du erlebst, ist ein bekannter Fehler / fehlende Funktion in Matplotlib. Zitat eines Co-Lead-Entwicklers von matplotlib :

    Wie ich das alles verstehe, ist das 3D-Plotten ein bisschen Hack.

    Das Problem kocht auf diese zusammenhängenden Blöcke von Flächen, die nacheinander aufgetragen werden, so dass jeder entweder ganz hinter jedem anderen oder ganz davor liegt. Dies bedeutet, dass alle zwei Objekte nur aus bestimmten Winkeln richtig gezeichnet werden, und es gibt keine Garantie, dass alle Objekte mit der richtigen Reihenfolge in vernünftigen Winkeln gezeichnet werden.

    Man würde denken, dass die Einstellung zorder Eigenschaften für die verschiedenen Objekte das Ergebnis beeinflussen könnte, aber dies ist nicht der Fall , da

    Aufteilung der Plotten ist, dass 'oben' und 'unten' in einem etwas, was arkanen Weg bestimmt sind

    mit anderen Worten

    Axes3D ignoriert Zorder und zieht Künstler in der Reihenfolge, in der sie denkt, dass sie sein sollten.

    Dies manifestiert sich in allen Arten von 3D-Plots, wie zum Beispiel beim Plotten von Text mit Flächen , Plotten komplizierter Oberflächen oder sogar Plotten von 3d-Bar-Plots (auch wenn man erwarten könnte, dass es einfacher ist, die Plotterreihenfolge innerhalb eines einzigen Funktionsaufrufs zu bestimmen).

    Für Flächen, die mit einem einzigen Befehl (dh solchen, die eine einzelne Poly3DCollection ) Poly3DCollection , können Sie die set_zsort() Methode verwenden, um einen mathematischen Hinweis auf matplotlib bezüglich der bevorzugten Plottenreihenfolge zu geben. Anders als dies, Ihre einzige Option ist, verschieben Sie Ihre Oberflächen und Betrachtungswinkel um (wenn überhaupt möglich) in einer Weise, dass das Problem nicht sichtbar ist, oder zumindest nicht ganz offensichtlich. Eine andere Option, die von @tcaswell vorgeschlagen wird, ist , mayavi anstelle von mplot3d zu verwenden (aber ich habe das nie selbst gemacht).

    Python ist die beste Programmiersprache der Welt.