将轴偏移值格式化为整数或特定数字
我有一个 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 轴,但这不起作用,尽管我可能错误地使用它或误解了文档中的某些内容,有人可以指出我正确的方向吗?
谢谢, Jonathan
我尝试使用格式化程序做一些事情,但还没有找到任何解决方案......:
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)
在旁注中,我实际上对“偏移数”对象实际驻留在哪里感到困惑......它是主要/次要刻度的一部分吗?
I have a matplotlib figure which I am plotting data that is always referred to as nanoseconds (1e-9). On the y-axis, if I have data that is tens of nanoseconds, ie. 44e-9, the value on the axis shows as 4.4 with a +1e-8 as an offset. Is there anyway to force the axis to show 44 with a +1e-9 offset?
The same goes for my x-axis where the axis is showing +5.54478e4, where I would rather it show an offset of +55447 (whole number, no decimal - the value here is in days).
I've tried a couple things like this:
p = axes.plot(x,y)
p.ticklabel_format(style='plain')
for the x-axis, but this doesn't work, though I'm probably using it incorrectly or misinterpreting something from the docs, can someone point me in the correct direction?
Thanks,
Jonathan
I tried doing something with formatters but haven't found any solution yet...:
myyfmt = ScalarFormatter(useOffset=True)
myyfmt._set_offset(1e9)
axes.get_yaxis().set_major_formatter(myyfmt)
and
myxfmt = ScalarFormatter(useOffset=True)
myxfmt.set_portlimits((-9,5))
axes.get_xaxis().set_major_formatter(myxfmt)
On a side note, I'm actually confused as to where the 'offset number' object actually resides...is it part of the major/minor ticks?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
我遇到了完全相同的问题,这些行解决了问题:
I had exactly the same problem, and these lines fixed the problem:
一个更简单的解决方案是简单地自定义刻度标签。举个例子:
请注意,在 y 轴的情况下,我将值乘以
1e9 然后提到 y 标签中的常量
EDIT
另一种选择是通过手动将其文本添加到图的顶部来伪造指数乘数:
EDIT2
您也可以以相同的方式设置 x 轴偏移值的格式:
A much easier solution is to simply customize the tick labels. Take this example:
Notice how in the y-axis case, I multiplied the values by
1e9
then mentioned that constant in the y-labelEDIT
Another option is to fake the exponent multiplier by manually adding its text to the top of the plot:
EDIT2
Also you can format the x-axis offset value in the same manner:
您必须对
ScalarFormatter
进行子类化才能执行您需要的操作..._set_offset
只是添加一个常量,您想要设置ScalarFormatter.orderOfMagnitude
。不幸的是,手动设置 orderOfMagnitude 不会执行任何操作,因为当调用 ScalarFormatter 实例来格式化轴刻度标签时它会重置。它不应该这么复杂,但我找不到一种更简单的方法来完成你想要的事情......这是一个例子:它会产生类似的结果:
而默认格式如下:
希望有所帮助!
编辑:对于它的价值,我也不知道偏移标签位于哪里...手动设置它会稍微容易一些,但我不知道该怎么做...我有这种感觉一定有比这一切更简单的方法。不过它确实有效!
You have to subclass
ScalarFormatter
to do what you need..._set_offset
just adds a constant, you want to setScalarFormatter.orderOfMagnitude
. Unfortunately, manually settingorderOfMagnitude
won't do anything, as it's reset when theScalarFormatter
instance is called to format the axis tick labels. It shouldn't be this complicated, but I can't find an easier way to do exactly what you want... Here's an example:Which yields something like:
Whereas, the default formatting would look like:
Hope that helps a bit!
Edit: For what it's worth, I don't know where the offset label resides either... It would be slightly easier to just manually set it, but I couldn't figure out how to do so... I get the feeling that there has to be an easier way than all of this. It works, though!
与 Amro 的答案类似,您可以使用 FuncFormatter
Similar to Amro's answer, you can use FuncFormatter
添加
set_scientific(False)
后,Gonzalo 的解决方案开始为我工作:Gonzalo's solution started working for me after having added
set_scientific(False)
:正如评论和在此答案中所指出的,可以通过执行以下操作来全局关闭偏移量:
As has been pointed out in the comments and in this answer, the offset may be switched off globally, by doing the following:
我认为更优雅的方法是使用股票格式化程序。以下是 x 轴和 y 轴的示例:
I think that a more elegant way is to use the ticker formatter. Here is an example for both xaxis and yaxis:
对于第二部分,无需再次手动重置所有刻度,这是我的解决方案:
显然您可以将格式字符串设置为您想要的任何内容。
For the second part, without manually resetting all the ticks again, this was my solution:
obviously you can set the format string to whatever you want.
乔·金顿的答案不知何故对我不起作用。但我发现 matplotlib 可以使用 set_powerlimits 现在:
Joe Kington's answer doesn't work for me somehow. But I find that matplotlib can do this natively with set_powerlimits now: