我正在创建一个自定义的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
我错了还是不应该在语法上等同于??? 这样可以命名每个子图,这将是以后访问它们的平滑方式(至少我希望如此......)