在pyqt5中绘制Matplotlib plots

2024-04-25 18:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在pyqt5窗口中使用导航工具栏绘制matplotlib plots,以便在单击时使用图形画布显示下一个图像。然而,代码给出了“图像无法转换为浮点”的错误坐标轴绘图. 数据来自csv,然后使用matplotlib打印。你知道吗

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets
import matplotlib.pyplot as plt
import pandas as pd
from wordcloud import WordCloud
from matplotlib.backends.backend_qt5agg import FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar

df=pd.read_csv('Trump.csv')

class Ui_MainWindow(object):
  def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(640, 480)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")


    self.figure = plt.figure()
    self.axes = self.figure.add_subplot(111)
    # We want the axes cleared every time plot() is called
    #self.axes.hold(False)
    self.axes.clear()
    self.canvas = FigureCanvas(self.figure)

    self.canvas.setParent(self)

    self.canvas.move(100,20)
    self.canvas.hide()
    self.toolbar = NavigationToolbar(self.canvas, self)
    self.toolbar.hide()


    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 21))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")

    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

  def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
  def __init__(self, parent=None):
    super().__init__(parent)
    self.setupUi(self)
    self.show()

 def show(self):
    wordcloud = WordCloud(random_state=21, max_font_size=110).generate(str(df['Tweets']))
    plot2= plt.imshow(wordcloud, interpolation="bilinear")        
    self.canvas.show()
    self.axes.imshow(plot2)
    self.canvas.draw()

    self.setScene(scene)

    plot3=sns.countplot(x = 'Vader', data = df)
    self.canvas.show()
    self.axes.imshow(plot3)
    self.canvas.draw()

    self.setScene(scene)

    #self.graphicsView.addItem((plt.imshow(wordcloud)))


if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
   w = MainWindow()
   w.show()
   sys.exit(app.exec_())

任何帮助都将不胜感激!你知道吗


Tags: fromimportselfmatplotlibdefshowpltcanvas
1条回答
网友
1楼 · 发布于 2024-04-25 18:17:56

将matplotlib与Qt一起使用时,不必使用pyplot,而是使用轴。你知道吗

import os
import sys

from PyQt5 import QtCore, QtWidgets

from matplotlib.backends.backend_qt5agg import FigureCanvas, NavigationToolbar2QT
from matplotlib.figure import Figure

from wordcloud import WordCloud
import pandas as pd


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.canvas = FigureCanvas(Figure(figsize=(5, 3)))
        self.toolbar = NavigationToolbar2QT(self.canvas, self)
        self.setCentralWidget(self.canvas)
        self.addToolBar(self.toolbar)
        self.axes = self.canvas.figure.add_subplot()

        current_dir = os.path.dirname(os.path.realpath(__file__))
        df = pd.read_csv(os.path.join(current_dir, "Trump.csv"))
        wordcloud = WordCloud(random_state=21, max_font_size=110).generate(
            str(df["Tweets"])
        )
        self.axes.imshow(wordcloud)

        self.resize(640, 480)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

enter image description here

相关问题 更多 >