我有一个日志形状轴什么是用计算值替换matplotlib刻度标签的正确方法?
,我想重新标记轴与价值观的日志蜱,而不是值本身
方式我已经做到了这一点与
plt.axes().set_xticklabels([math.log10(x) for x in plt.axes().get_xticks()])
但我不知道没有一个不太复杂的方式来做到这一点。
在matplotlib
图表上系统地重新标记刻度的正确用法是什么?用原始刻度值计算得出的值是多少?
我有一个日志形状轴什么是用计算值替换matplotlib刻度标签的正确方法?
,我想重新标记轴与价值观的日志蜱,而不是值本身
方式我已经做到了这一点与
plt.axes().set_xticklabels([math.log10(x) for x in plt.axes().get_xticks()])
但我不知道没有一个不太复杂的方式来做到这一点。
在matplotlib
图表上系统地重新标记刻度的正确用法是什么?用原始刻度值计算得出的值是多少?
看看Formatter
类。除非你在你的蜱中放置文字,否则你几乎不应该直接使用set_xticklabels
或set_yticklabels
。这完全取消了你的刻度标签和你的数据。如果您调整视图限制,则刻度标签将保持不变。
在你的情况,格式化已经存在这样的:
fig, ax = plt.subplots()
ax.loglog(np.logspace(0, 5), np.logspace(0, 5)**2)
ax.xaxis.set_major_formatter(matplotlib.ticker.LogFormatterExponent())
matplotlib.ticker.LogFormatterExponent
doc
一般来说,你可以使用FuncFormatter
。有关如何使用FuncFomatter
的示例,请参阅matplotlib: change yaxis tick labels其中许多示例都围绕着SO。
你想,从JoeKington提升正是在评论什么简明例如,:
ax.xaxis.set_major_formatter(
FuncFormatter(lambda x, pos: '{:0.1f}'.format(log10(x))))
在附注上,'LogFormatterExponent'有一些怪癖(例如切换到科学记数法以获得负值)。在这种情况下使用'FuncFormatter'会更好一些。对于OP的引用,'FuncFormatter'需要一个带有两个参数的函数:值和它的位置。例如:'FuncFormatter(lambda x,pos:'{:0.1f}'.format(log10(x)))''。 –
用科学记数法而不是整数格式化负指数。另外(更重要的是)我很好奇* matplotlib图上的ticks重新标记的值,它是根据原始tick值计算得出的值,而不仅仅是存在'Formatter'的情况。 – orome
@JoeKington,很有意思。在回答这个问题时我发现了'LogFormatterExponent'。你知道这种消极行为的原因吗? – tacaswell
如果你不想使用'Formatter',你可以只使用'plt.xticks(x_ticks, x_ticklabels)'把预先定义的'x_ticklabels'放在预定义的'x_ticks'的每个相应节点上。 – mikey