迷失在matplotlib名称空间的迷宫中

时间:2015-02-26 11:09:52

标签: python-2.7 matplotlib pyqt4

我正在创建一个自定义的matplotlib QWidget,我希望它具有多样性和可重用性。所以现在我想要一个QWidget内部的方法来创建子图,之后可以访问这些子图。艺术家作为mpl中的列表出现但由于某些原因,子图不会(afaik)所以它们只能按连续顺序访问,如:

ax = fig.add_subplot(211)
line, = ax.plot([1,2,3]) #here, artists are appended to a list, which is fine
ax2 = fig.add_subplot(212)
line2, ax2.plot([...

我有什么:(抱歉发布了这么多代码,但我真的迷失在mpl的命名空间中,你觉得我?)

class MplCanvas(FigureCanvas):
    """Represents a canvas in QtGui.QWidget"""

    def __init__(self):
        self.fig = Figure()
        FigureCanvas.__init__(self, self.fig)

        FigureCanvas.setSizePolicy(self,
                                   QtGui.QSizePolicy.Expanding,
                               QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

......一切都很好。

class MplWidget(QtGui.QWidget):
    """represents a custom Matplotlib QWidget"""

    def __init__(self):
        QtGui.QWidget.__init__(self, parent=None)
        layout = QtGui.QVBoxLayout(self)
        self.canvas = MplCanvas()
        layout.addWidget(self.canvas)

    def add_subplot(self, nrows=1, ncols=1, plot_number=1):
        self.axes = self.canvas.fig.add_subplot(nrows, ncols, plot_number)
        #getattr(self, 'axes') = self.canvas.fig.add_subplot(nrows, ncols, plot_number)

    def draw_array(self, a):
        artist, = self.axes.plot(a) 
        self.canvas.draw()

我真正不明白的原因是:

self.axes = self.canvas.fig.add_subplot(nrows, ncols, plot_number)

没关系。但是:

getattr(self, 'axes') = self.canvas.fig.add_subplot(nrows, ncols, plot_number)

给了我:

SyntaxError: can't assign to function call

我错了还是不应该在语法上等同于??? 这样可以命名每个子图,这将是以后访问它们的平滑方式(至少我希望如此......)

0 个答案:

没有答案