如何更改matplotlib中轴标签的格式

如何更改matplotlib中轴标签的格式,matplotlib,axis-labels,Matplotlib,Axis Labels,如果我绘制一个对数比例图,matplotlib会给我一个漂亮的条目105,106 然而,为了便于阅读,我更喜欢表格1e5、1e6 我可以直接将轴属性设置为那样吗 我认为这是一个相当丑陋的骇客: import matplotlib.pyplot as plt import numpy as np x = np.linspace(1, 40, 100); y = np.linspace(1, 5, 100); # Actually plot the exponential values plt.

如果我绘制一个对数比例图,matplotlib会给我一个漂亮的条目105,106

然而,为了便于阅读,我更喜欢表格1e5、1e6

我可以直接将轴属性设置为那样吗

我认为这是一个相当丑陋的骇客:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 40, 100);
y = np.linspace(1, 5, 100);

# Actually plot the exponential values
plt.plot(x, 10**y)
ax = plt.gca()
ax.set_yscale('log')

# Rewrite the y labels
y_labels = ax.get_yticks()
ax.set_yticklabels(['1e%i' % np.round(np.log(y)/np.log(10)) for y in y_labels])

plt.show()

但肯定有更好的方法。

你可以用。这将使用字符串格式
%0.0e
格式化每个数字,该格式使用指数表示法表示浮点数:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = np.linspace(1, 40, 100)
y = np.linspace(1, 5, 100)

# Actually plot the exponential values
fig, ax = plt.subplots()
ax.plot(x, 10**y)
ax.set_yscale('log')

# Rewrite the y labels
y_labels = ax.get_yticks()
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter('%0.0e'))

plt.show()
屈服


可能有一些方法可以使用和
FormatStrFormatter
完美,这正是我想要的。您碰巧不知道如何将
1e+04
格式化为
1e4
?不幸的是,无法控制这一点。如果您确实想沿着这条路走下去,请注意,您可以使用
ticker.FuncFormatter
。是的,这就是我的想法。不过还是要谢谢你的帮助。