如何使用matplotlib设置偏移量

时间:2013-07-17 08:44:42

标签: python-2.7 matplotlib

我正在尝试删除matplotlib自动放在我的图表上的偏移量。例如,使用以下代码:

x=np.array([1., 2., 3.])
y=2.*x*1.e7
MyFig = plt.figure()
MyAx = MyFig.add_subplot(111)
MyAx.plot(x,y)

我获得了以下结果(抱歉,我无法发布图像):y轴的刻度为2,2.5,3,...,6,在y的顶部有一个唯一的“x10 ^ 7”轴。

我想从轴的顶部删除“x10 ^ 7”,并使其与每个刻度(2x10 ^ 7,2.5x10 ^ 7等等)出现。如果我理解我在其他主题中看到的内容,我必须使用use_Offset变量。所以我尝试了以下的事情:

MyFormatter = MyAx.axes.yaxis.get_major_formatter()
MyFormatter.useOffset(False)
MyAx.axes.yaxis.set_major_formatter(MyFormatter)

没有任何成功(结果不变)。 难道我做错了什么?我该如何改变这种行为?或者我要手动设置滴答?

感谢提前帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用ticker模块中的FuncFormatter来设置刻度标签的格式:

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

x=np.array([1., 2., 3.])
y=2.*x*1.e7

MyFig = plt.figure()
MyAx = MyFig.add_subplot(111)

def sci_notation(x, pos):
    return "${:.1f} \\times 10^{{6}}$".format(x / 1.e7)

MyFormatter = FuncFormatter(sci_notation)

MyAx.axes.yaxis.set_major_formatter(MyFormatter)

MyAx.plot(x,y)

plt.show()

enter image description here


旁注;出现在轴顶部的“x10 ^ 7”值不是偏移量,而是科学记数法中使用的因子。可以通过调用MyFormatter.use_scientific(False)禁用此行为。数字将显示为小数。

偏移量是您必须添加(或减去)到滴答值而不是乘以的值,因为后者是尺度

供参考,该行

MyFormatter.useOffset(False)

应该是

MyFormatter.set_useOffset(False)

因为第一个是bool(只能包含值TrueFalse),这意味着它不能作为方法调用。后者是用于启用/禁用偏移的方法。