首页 > 解决方案 > 在pyqt5小部件Python中显示matplot图

问题描述

我正在创建一个pyqt5需要显示matplotlib图表的应用程序。我正在关注这个来自 youtube 的视频。在这个视频中,他首先在 qt Designer 中创建了一个窗口,并添加了一个用于显示图形的小部件。下面是代码:

他为 matplotlib 小部件创建了这个类:

class MatplotlibWidget(QWidget):
    def __init__(self, parent=None):
        super(MatplotlibWidget, self).__init__(parent)
        self.figure = Figure()
        self.canvas = FigureCanvasQTAgg(self.figure)
        self.axis = self.figure.add_subplot(111)

        self.layoutvertical = QVBoxLayout(self)
        self.layoutvertical.addWidget(self.canvas)

然后这就是它的使用方式:

self.matplotlibwidget = MatplotlibWidget()
self.layoutvertical = QVBoxLayout(self.home_ui.total_persons_per_gallery_widget)
self.layoutvertical.addWidget(self.matplotlibwidget)

self.matplotlibwidget.axis.clear()
x = np.random.random(10)
y = np.random.random(10)
txts = ["P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10"]
self.matplotlibwidget.axis.scatter(x, y)
for index, txt in enumerate(txts):
    self.matplotlibwidget.axis.annotate(txt, (x[index], y[index]))
self.matplotlibwidget.canvas.draw()

上面的代码工作正常并显示在下图

在此处输入图像描述

在上面的 coe 中class MatplotlibWidget(QWidget),我无法理解这一行self.axis = self.figure.add_subplot(111)

我想创建一个条形图,我将代码更新为以下内容:

self.matplotlibwidget = MatplotlibWidget()
self.layoutvertical = QVBoxLayout(self.home_ui.total_persons_per_gallery_widget)
self.layoutvertical.addWidget(self.matplotlibwidget)

objects = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
y_pos = np.arange(len(objects))
performance = [10, 8, 6, 4, 2, 1]

self.matplotlibwidget.bar(y_pos, performance, align='center', alpha=0.5)
self.matplotlibwidget.xticks(y_pos, objects)
self.matplotlibwidget.ylabel('Usage')
self.matplotlibwidget.title('Programming language usage')

self.matplotlibwidget.canvas.draw()

它给了我一个错误,即 matplotlibwidget 没有栏。谁能告诉我如何更新代码以显示条形图或任何其他图表。请帮忙。谢谢

标签: pythonmatplotlibgraphpyqt5

解决方案


推荐阅读