Plotten von mplot3d / axes3D xyz-Oberflächendiagrammen mit logarithmischem Maßstab?

Ich habe hoch und niedrig nach einer Lösung für dieses einfache Problem gesucht, aber ich kann es nirgendwo finden! Es gibt eine Menge Beiträge, die das Zeichnen von Daten in 2D, z. plt.setxscale ('log') Ich bin jedoch daran interessiert, log-Maßstäbe auf einem 3D-Plot (mplot3d) zu verwenden.

Ich habe nicht den genauen Code zur Hand und kann ihn daher nicht hier posten. Das einfache Beispiel unten sollte jedoch ausreichen, um die Situation zu erklären. Ich verwende derzeit Matplotlib 0.99.1, sollte aber in Kürze auf 1.0.0 aktualisiert werden. Ich weiß, dass ich meinen Code für die Implementierung von mplot3d aktualisieren muss.

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-5, 5, 0.025)
Y = np.arange(-5, 5, 0.025)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, extend3d=True)
ax.set_zlim3d(-1.01, 1.01)

ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))

fig.colorbar(surf)

plt.show()

Der obige Code wird in 3D gut dargestellt, die drei Skalen (X, Y, Z) sind jedoch alle linear. Meine 'Y'-Daten erstrecken sich über mehrere Größenordnungen (wie 9!), Daher wäre es sehr nützlich, sie auf einer logarithmischen Skala zu zeichnen. Ich kann das umgehen, indem ich das Protokoll des 'Y' nehme, das numpy-Array neu erstelle und das Protokoll (Y) auf einer linearen Skala zeichne, aber im wahren Python-Stil suche ich nach einer intelligenteren Lösung, mit der die Daten auf a gezeichnet werden logarithmische Darstellung

Ist es möglich, ein 3D-Flächendiagramm meiner XYZ-Daten mithilfe von Log-Skalen zu erstellen, idealerweise möchte ich X & Z auf linearen Skalen und Y auf einer Log-Skala?

Jede Hilfe wäre sehr dankbar. Bitte verzeihen Sie offensichtliche Fehler im obigen Beispiel. Wie bereits erwähnt, habe ich nicht den genauen Code, den ich haben muss, und habe daher ein matplotlib-Galeriebeispiel aus meinem Gedächtnis entfernt.

Vielen Dan

Antworten auf die Frage(8)

Ihre Antwort auf die Frage