不幸的是,以下最小示例
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.25)
Y = np.arange(-5, 5, 0.25)
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)
ax.set_zlim3d(-1.01, 1.01)
ax.set_yscale('log')
ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
fig.colorbar(surf)
plt.show()
产生以下无意义的情节:
如何正确使用ax.set_yscale('log')
来产生有意义的情节?
(或:我可以想象一个解决方法:更改刻度日志的位置(即转换 y = log(y) 然后将刻度重命名回 y),但这会产生均匀间隔的刻度,实际上我没有知道如何做到这一点。)