2013-04-23 64 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