2013-04-23 62 views
0

內的功能我有有許多繪圖函數的類。我的意圖是用matplotlib的子圖方法將所有圖形組合在一個圖像中,具體取決於我調用的函數。增加計數器每次我調用類

我試着像下面這樣(這是我的計劃的一個短版),但我不知道爲什麼不工作。

任何幫助表示讚賞。提前致謝。

import itertools 
import numpy as np 
from matplotlib import pyplot as plt 

class Base(object): 
    def __init__(self, a, multiPlot=True, numColGraph=None, numRowGraph=None, 
       figSize=None, DPI=None, num=None): 

     self.a = a 
     self.x = np.linspace(0, 5) 

     if multiPlot: 
     self.nCG = numColGraph 
      self.nRG = numRowGraph 
     else: 
      self.nCG = 1 
      self.nRG = 1 

     if figSize and DPI: 
      self.thePlot = plt.figure(figsize=figSize, dpi=DPI) 

     if num == 0: 
      self.plotId = itertools.count(1) 

    def createPlot1(self): 
     y = self.x**(a/2) 
     self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId)) 
     plt.plot(self.x, y, label=str(self.a)+'/2') 

    def createPlot2(self): 
     y = self.x**a 
     self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId)) 
     plt.plot(self.x, y, label=self.a) 

    def createPlot3(self): 
     y = self.x**(2*a) 
     self.thePlot.add_subplot(self.nRG, self.nCG, next(self.plotId)) 
     plt.plot(self.x, y, label=str(self.a)+'*2') 


if __name__ == "__main__": 

    A = np.linspace(0, 2, 5) 

    for i, a in enumerate(A): 
     Instance = Base(a, numColGraph=3, numRowGraph=len(A), 
       figSize=(12,10), DPI=100, num=i) 
     Instance.createPlot1() 
     Instance.createPlot2() 
     Instance.createPlot3() 

    plt.show() 
+2

當你說「它不工作」時,你能更具體地說明你期望的工作以及相反的結果嗎? – SethMMorton 2013-04-23 23:48:34

+0

好了,首先,我得到以下錯誤:「基地」對象有沒有屬性「plotId」,但我已經decleared它。我想在循環之後得到同一圖中的三個圖(圖,無論你怎麼稱呼它)。我遇到的問題是每次調用函數時增加plotId變量。對不起,如果我不讓自己清楚,英語不是我的母語。 – ezitoc 2013-04-24 00:34:29

+1

我懷疑你可能正在錯誤地使用你的'plotId'變量。 它只是變得設置'如果num == 0',但你(從歷數)實例'Base'對象0一次,不再。後 – bbayles 2013-04-24 01:22:58

回答

1

在最低限度,您有未定義的變量。我看到這種模式(或類似的東西)三次:

y = self.x**(2*a) 

但在沒有這些案件中有你定義a。也許你的意思是:

y = self.x**(2*self.a) 
+0

是的,抱歉,我結束了未完成的示例。對不起。我糾正了。 – ezitoc 2013-04-24 00:39:22

+0

@ezitoc仍然有錯誤,通過cwallenpoole你的問題指出。 – Hooked 2013-04-24 04:37:03