对数Axes3D更好的刻度

时间:2017-05-01 19:20:16

标签: python matplotlib

创建日志Axes3D对象是个问题(参见here

解决方法是

import matplotlib.ticker as mticker

ax.plot_surface(x, y, np.log10(z))

def log_tick_formatter(val, pos=None):
    return "{:.2e}".format(10**val)

ax.zaxis.set_major_formatter(mticker.FuncFormatter(log_tick_formatter))

这会产生1.0e-5形式的zticks。 我该如何修改它以获得(LaTeX)的刻度 表格10 ^ { - 5}(如标准的logplots中所示)?

这是一个最小的例子。非常感谢提前!

import matplotlib.pyplot as plt 
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.ticker as mticker
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.arange(5+1)
y = np.arange(6+1)
X, Y = np.meshgrid(x, y)
Z = np.zeros(X.shape)
for ii in x:
    for jj in y:
        Z[jj, ii] = -min(ii, jj) 
ax.plot_wireframe(X, Y, Z)
ax.view_init(elev=10, azim=-45)
def log_tick_formatter(val, pos=None):
    return "{:.0e}".format(10**val)
ax.zaxis.set_major_formatter(mticker.FuncFormatter(log_tick_formatter))
plt.gca().invert_yaxis()
plt.show()
plt.close()

1 个答案:

答案 0 :(得分:0)

您可以使用以下格式:

def log_tick_formatter(val, pos=None):
    return r"$10^{{{:.0f}}}$".format(val)

但要注意这一点 - 就像你的解决方案一样 - 只有当蜱被意外地放在整数时才有效。