Ich habe nach einer Lösung für dieses einfache Problem gesucht, aber ich kann es nirgends finden! Es gibt eine Menge von Posts, die das Semilog/Loglog-Plotten von Daten in 2D, z.B. plt.setxscale ('log') aber ich interessiere mich für Log-Skalen auf einem 3D-Plot (mplot3d).Plotten mplot3d/axes3D xyz Oberflächendiagramm mit logarithmischer Skala?
Ich habe nicht den genauen Code zur Hand und kann ihn daher hier nicht posten, aber das einfache Beispiel unten sollte ausreichen, um die Situation zu erklären. Ich verwende derzeit Matplotlib 0.99.1, sollte aber in Kürze auf 1.0.0 aktualisieren - ich muss meinen Code für die mplot3d-Implementierung aktualisieren.
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-Plot feinen, jedoch sind die drei Skalen (X, Y, Z) sind alle linear. Meine 'Y'-Daten umfassen mehrere Größenordnungen (wie 9!), So dass es sehr nützlich wäre, sie auf einer logarithmischen Skala zu zeichnen. Ich kann das umgehen, indem ich das Logbuch des 'Y' nehme, das numpy Array wieder erstelle und das Log (Y) linear zeichne, aber im wahren Python-Stil suche ich nach einer intelligenteren Lösung, die die Daten auf einem plotet logarithmische Darstellung.
Ist es möglich, ein 3D-Oberflächendiagramm meiner XYZ-Daten mit Hilfe von Log-Skalen zu erstellen, idealerweise möchte ich X & Z auf linearen Skalen und Y auf einer logarithmischen Skala?
Jede Hilfe würde sehr geschätzt werden. Bitte verzeihen Sie alle offensichtlichen Fehler im obigen Beispiel, wie erwähnt, ich habe nicht meinen genauen Code zu haben und habe daher ein Matplotlib-Galerie-Beispiel aus meinem Gedächtnis geändert.
Dank
Die obige Antwort behauptet, dass diese Antwort falsch ist. Hast du eine Antwort darauf? – dbliss