我正在使用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)
答案 0 :(得分:1)
问题可能是由于错误的假设:如果你有一个数字且该数字包含一个或多个轴,你可以通过fig.get_axes()
访问这些轴。如果图形不包含轴,您仍可以通过fig.add_subplot()
或fig.add_axes()
向其添加轴。
因此,您在此尝试解决的问题可能很容易被规避。
提出问题本身。画布始终与图形相关联。没有图形的画布毫无意义。有两种选择:
您可以延迟创建FigureCanvas
,直到您有权访问要显示的数字。
self.figure = <figure you want to show>
FigureCanvas.__init__(self, self.figure)
您可以使用托管要显示的新图形的画布替换您已有的画布。
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()