2016-11-08 108 views

回答

2

在行:

formatter = FuncFormatter(millions) 

正在创建的FuncFormatter类,它正在与millions函数初始化的一个实例。这是一个matplotlib接受的类,它是api的一部分来格式化tick。在该示例中,将formatter对象传递给y轴的set_major_formatter方法,以便使用millions函数格式化滴答。

你可以看到这是如何工作在matplotlib源代码。类的定义如下:

class FuncFormatter(Formatter): 
    """ 
    User defined function for formatting 

    The function should take in two inputs (tick value *x* and position *pos*) 
    and return a string 
    """ 
    def __init__(self, func): 
     self.func = func 

    def __call__(self, x, pos=None): 
     'Return the format for tick val *x* at position *pos*' 
     return self.func(x, pos) 

所以,现在存储在formatter对象将具有属性func它指向millions功能。当matplotlib让到你通过它的formatter对象的调用,它将传递参数(即由蜱表示的值),这是指向self.func

由于millions功能只格式化为millions功能基于x值而不是在该位置上打勾,millions的定义仅包含pos参数作为虚拟占位符。它必须这样做,以便在格式化ticks时由matplotlib调用self.func(x, pos)时不会出现错误。