我一直在尋找解決這個簡單問題的高和低,但我找不到它!有大量的帖子詳細介紹了2D中數據的semilog/loglog繪圖。 plt.setxscale('log')但是我有興趣在三維圖(mplot3d)上使用對數尺度。使用對數刻度繪製mplot3d/axes3D xyz曲面繪圖?
我沒有確切的代碼交出,因此不能張貼在這裏,但是下面的簡單的例子應該足夠說明情況。我目前正在使用Matplotlib 0.99.1,但很快就會更新到1.0.0 - 我知道我必須更新我的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()
上述代碼在3D中繪製得很好,但是三個刻度(X,Y,Z)都是線性的。我的'Y'數據跨越了幾個數量級(如9!),因此將它繪製在對數座標上會非常有用。我可以通過取得'Y'的日誌,重新創建numpy數組並在線性範圍內繪製日誌(Y)來解決此問題,但是以真正的python樣式,我正在尋找更智能的解決方案,它將繪製數據日誌規模。
是否可以使用對數刻度生成我的XYZ數據的3D曲面圖,理想情況下,我想在線性刻度上使用X & Z,並且使用對數刻度上的Y?
任何幫助將不勝感激。請原諒在上面的例子中的任何明顯的錯誤,如上所述,我沒有我的確切代碼,因此改變了我的記憶matplotlib畫廊的例子。
謝謝
上面的答案聲稱這個答案是錯誤的。你有迴應嗎? – dbliss 2015-11-17 05:54:24