用计算值替换matplotlib刻度标签的正确方法是什么?

oro*_*ome 7 python axes matplotlib

我有一个带有对数轴的图形

在此输入图像描述

我想重新标记轴刻度与值的日志,而不是值本身

在此输入图像描述

我完成这个的方式是

plt.axes().set_xticklabels([math.log10(x) for x in plt.axes().get_xticks()])
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种不太复杂的方式来做到这一点.

matplotlib通过从原始刻度值计算的值系统地重新标记图上的刻度线的正确习惯是什么?

tac*_*ell 6

看看Formatter课程.除非你在你的刻度线上放置文字,否则你几乎不应该直接使用set_xticklabelsset_yticklabels.这会将您的刻度标签与您的数据完全分开.如果调整视图限制,则刻度标签将保持不变.

在您的情况下,格式化程序已存在于此:

fig, ax = plt.subplots()
ax.loglog(np.logspace(0, 5), np.logspace(0, 5)**2)
ax.xaxis.set_major_formatter(matplotlib.ticker.LogFormatterExponent())
Run Code Online (Sandbox Code Playgroud)

matplotlib.ticker.LogFormatterExponent DOC

一般来说你可以使用FuncFormatter.有关如何使用的示例FuncFomatter请参阅matplotlib:更改yaxis tick标签,其中一个示例浮动在SO周围.

一个简洁的例子,你想要什么,在评论中完全取自JoeKington:

ax.xaxis.set_major_formatter(
   FuncFormatter(lambda x, pos: '{:0.1f}'.format(log10(x))))
Run Code Online (Sandbox Code Playgroud)