在画布上绘制一个图形

时间:2017-08-07 07:59:56

标签: python qt matplotlib pyqt qt-designer

我正在使用Qt Designer和matplotlib进行绘图。

到目前为止,我已经将一个Qwidget提升为Canvas类,并通过创建轴并使用figure.add_subplot()绘制它来绘制我的图,所以代码看起来像这样:

ax = self.canvas.figure.add_subplot(111)

ax.plot(data)

self.canvas.draw()

但现在我有一个数字对象,我需要绘制它。有没有办法在没有实现轴并将它们分配给数字的情况下做到这一点?我有办法吗? “self.canvas.add_figure”?因为在我的情况下,我无法访问轴。

编辑:这是画布的代码。

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
import matplotlib.pyplot as plt
from PyQt4 import QtGui
class Canvas(FigureCanvas):
    def __init__(self, parent=None):
        self.figure = plt.figure()
        FigureCanvas.__init__(self, self.figure)
        self.setParent(parent)
        FigureCanvas.setSizePolicy(self,
                               QtGui.QSizePolicy.Expanding,
                               QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

1 个答案:

答案 0 :(得分:1)

问题可能是由于错误的假设:如果你有一个数字且该数字包含一个或多个轴,你可以通过fig.get_axes()访问这些轴。如果图形不包含轴,您仍可以通过fig.add_subplot()fig.add_axes()向其添加轴。 因此,您在此尝试解决的问题可能很容易被规避。

提出问题本身。画布始终与图形相关联。没有图形的画布毫无意义。有两种选择:

1。使用可用的数字

创建画布

您可以延迟创建FigureCanvas,直到您有权访问要显示的数字。

self.figure = <figure you want to show>
FigureCanvas.__init__(self, self.figure)

2。替换画布

您可以使用托管要显示的新图形的画布替换您已有的画布。

self.layout().removeWidget(self.canvas)
# create a new canvas
self.figure = <figure you want to show>
self.canvas = FigureCanvas(self.figure)
# add the new canvas at the position of the old one
self.layout().addWidget(self.canvas, 1)
self.canvas.draw()
self.parent.parent.processEvents()