我有一个matplotlib图,我正在绘制数据,总是被称为纳秒(1e-9) . 在y轴上,如果我有数十纳秒的数据,即 . 在图44e-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 回答
我有完全相同的问题,这两行修复了问题:
更简单的解决方案是简单地自定义刻度标签 . 举个例子:
请注意在y轴情况下,我将值乘以
1e9
,然后在y标签中提到该常量EDIT
另一种选择是通过手动将其文本添加到图的顶部来伪造指数乘数:
EDIT2
您也可以以相同的方式格式化x轴偏移值:
你必须子类
ScalarFormatter
做你需要的..._set_offset
只需添加一个常量,你想设置ScalarFormatter.orderOfMagnitude
. 不幸的是,当调用ScalarFormatter
实例来格式化轴刻度标签时,手动设置orderOfMagnitude
赢了't do anything, as it' s重置 . 它不应该找到一种更简单的方法来完成你想要的......这是一个例子:产生的结果如下:
而默认格式如下:
希望那有所帮助!
编辑:对于它的 Value ,我不知道偏移标签所在的位置......手动设置它会稍微容易些,但我无法弄清楚如何这样做......我感觉到了必须有一个比这一切更简单的方法 . 但是它有效!
与Amro的答案类似,您可以使用FuncFormatter
我认为更优雅的方法是使用自动收报机格式化程序 . 以下是xaxis和yaxis的示例:
添加
set_scientific(False)
后,Gonzalo的解决方案开始为我工作:正如评论和in this answer中所指出的那样,通过执行以下操作,可以全局关闭偏移量:
对于第二部分,没有再次手动重置所有刻度,这是我的解决方案:
显然你可以将格式字符串设置为你想要的任何东西 .