2016-11-08 153 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)時不會出現錯誤。

相關問題