matplotlib轴标签偏移的因素和偏移

时间:2017-07-25 14:08:32

标签: python matplotlib

在matplotlib的轴刻度标签上,有两种可能的偏移:因子转移

enter image description here

在右下角1e-8将是一个“因素”,而1.441249698e1将是一个“转变”。

这里有很多答案显示如何操纵两者

我想删除这些转变,似乎无法弄清楚如何做到这一点。所以matplotlib应该只允许缩放我的轴,但不能移动零点。 是否有一种简单的方法可以实现此行为?

1 个答案:

答案 0 :(得分:0)

您可以修正在轴上显示的数量级,如this question所示。我们的想法是将通常的ScalarFormatter子类化,并确定要显示的数量级。然后将useOffset设置为False将阻止显示某些偏移,但仍显示该因子。

我们的格式"%1.1f"只显示一位小数。最后使用MaxNLocator允许设置轴上的最大刻度数。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker

class OOMFormatter(matplotlib.ticker.ScalarFormatter):
    def __init__(self, order=0, fformat="%1.1f", offset=False, mathText=True):
        self.oom = order
        self.fformat = fformat
        matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText)
    def _set_orderOfMagnitude(self, nothing):
        self.orderOfMagnitude = self.oom
    def _set_format(self, vmin, vmax):
        self.format = self.fformat
        if self._useMathText:
            self.format = '$%s$' % self.format

x = [0.6e-8+14.41249698, 3.4e-8+14.41249698]
y = [-7.7e-11-1.110934954e-2, -0.8e-11-1.110934954e-2]

fig, ax = plt.subplots()
ax.plot(x,y)

y_formatter = OOMFormatter(-2, "%1.1f")
ax.yaxis.set_major_formatter(y_formatter)
x_formatter = OOMFormatter(1, "%1.1f")
ax.xaxis.set_major_formatter(x_formatter)

ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(2))
ax.yaxis.set_major_locator(matplotlib.ticker.MaxNLocator(2))

plt.show()

enter image description here

请记住,这个情节不准确,你不应该在任何报告中使用它,因为他们不知道如何解释它。