我有一个matplotlib图,我绘制的数据总是被称为纳秒(1 e-9)。在y轴上,如果我有几十纳秒的数据,即。44 e-9,轴上的值显示为4.4,其中+1e-8作为偏移。是否有任何方法可以强制轴显示为44,偏移量为+1e-9?
同样的道理也适用于我的x轴,其中轴显示+5.54478e4,我宁愿它显示+55447的偏移量(整数,没有小数-这里的值是以天为单位)。
我试过几种这样的方法:
p = axes.plot(x,y)
p.ticklabel_format(style='plain')
对于x轴,但这不起作用,虽然我可能使用错误或误解了文档中的某些东西,有人能告诉我正确的方向吗?
谢谢,乔纳森
我试着用格式化程序做一些事情,但还没有找到任何解决方案...:
myyfmt = ScalarFormatter(useOffset=True)
myyfmt._set_offset(1e9)
axes.get_yaxis().set_major_formatter(myyfmt)
和/或
myxfmt = ScalarFormatter(useOffset=True)
myxfmt.set_portlimits((-9,5))
axes.get_xaxis().set_major_formatter(myxfmt)
顺便说一句,我实际上对“偏移量”对象实际驻留的位置感到困惑......它是主/次刻度的一部分吗?
8条答案
按热度按时间a5g8bdjr1#
我遇到了同样的问题,这些行解决了这个问题:
vsmadaxz2#
一个更简单的解决方案是简单地自定义刻度标签。举个例子:
请注意,在y轴的情况下,我将值乘以
1e9
,然后在y标签中提到该常数编辑
另一个选项是通过手动将其文本添加到图的顶部来伪造指数乘数:
EDIT2
也可以以相同的方式设置x轴偏移值的格式:
yhqotfr83#
你必须子类化
ScalarFormatter
来做你需要做的事情。_set_offset
只是增加了一个常数,你想设置ScalarFormatter.orderOfMagnitude
。不幸的是,手动设置orderOfMagnitude
不会做任何事情,因为当调用ScalarFormatter
示例来格式化轴刻度标签时,它会被重置。它不应该这么复杂,但我找不到一个更简单的方法来做你想要的...下面是一个例子:这会产生如下结果:
而默认格式如下所示:
希望能帮上一点忙!
编辑:无论如何,我也不知道偏移标签在哪里...这将是稍微容易只是手动设置它,但我不知道如何做到这一点...我觉得肯定有比这更简单的办法。不过,它很管用!
oo7oh9g94#
与Amro的答案类似,可以使用FuncFormatter
yfjy0ee75#
Gonzalo的解决方案在添加
set_scientific(False)
后开始对我有效:ruyhziif6#
正如注解和in this answer中所指出的,偏移可以通过执行以下操作全局关闭:
j9per5c47#
我认为更优雅的方法是使用代码格式化程序。下面是xaxis和yaxis的示例:
dgsult0t8#
对于第二部分,我的解决方案是:
显然,你可以设置格式字符串为任何你想要的。