如何在 3D 图中使用对数刻度 (matplotlib)

时间:2021-03-25 09:17:02

标签: matplotlib

不幸的是,以下最小示例

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()

产生以下无意义的情节:

not correct display

如何正确使用ax.set_yscale('log')来产生有意义的情节?

(或:我可以想象一个解决方法:更改刻度日志的位置(即转换 y = log(y) 然后将刻度重命名回 y),但这会产生均匀间隔的刻度,实际上我没有知道如何做到这一点。)

0 个答案:

没有答案