Szukałem rozwiązania wysokiego i niskiego dla rozwiązania tego prostego problemu, ale nie mogę go nigdzie znaleźć! Istnieje wiele postów opisujących tworzenie wykresów półilogowych/loglogowych danych w 2D, np. plt.setxscale ('log') jednak jestem zainteresowany wykorzystaniem skal logu na wykresie 3d (mplot3d).Wykreślanie wykresu powierzchni mplot3d/axes3D xyz za pomocą skali logarytmicznej?
Nie mam dokładnego kodu do przekazania, więc nie można go opublikować tutaj, jednak prosty przykład poniżej powinien wystarczyć do wyjaśnienia sytuacji. Obecnie używam Matplotlib 0.99.1, ale wkrótce powinienem zaktualizować do 1.0.0 - Wiem, że będę musiał zaktualizować mój kod do implementacji mplot3d.
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()
Powyższy kod będzie działał dobrze w 3D, jednak wszystkie skale (X, Y, Z) są liniowe. Moje dane "Y" rozciągają się o kilka rzędów wielkości (jak 9!), Więc bardzo przydatne byłoby wykreślenie ich na skali logarytmicznej. Mogę obejść to, biorąc dziennik "Y", odtwarzając tablicę numpy i wykreślając dziennik (Y) w skali liniowej, ale w prawdziwym stylu Pythona szukam mądrzejszego rozwiązania, które wyrysuje dane na skala logarytmiczna.
Czy możliwe jest wykonanie trójwymiarowego wykresu powierzchni moich danych XYZ za pomocą skali logarytmicznej, najlepiej jeśli chciałbym uzyskać X & Z w liniowej skali i Y w skali logarytmicznej?
Każda pomoc zostanie bardzo doceniona. Proszę wybaczyć wszelkie oczywiste błędy w powyższym przykładzie, jak wspomniano, że nie mam mojego dokładnego kodu, a więc zmieniłem przykład galerii matplotlib z mojej pamięci.
Dzięki
powyższa odpowiedź twierdzi, że ta odpowiedź jest błędna. czy masz na to odpowiedź? – dbliss