简体   繁体   English

在 pyqt5 中绘制 Matplotlib 绘图

[英]Ploting Matplotlib plots in pyqt5

I'm trying to plot matplotlib plots in pyqt5 windows with navigation toolbar in order to show the next image on click using Figure Canvas. I'm trying to plot matplotlib plots in pyqt5 windows with navigation toolbar in order to show the next image on click using Figure Canvas. However the code is giving "image cannot converted to float" error on axes.plot.但是代码在axes.plot上给出“图像无法转换为浮点数”错误。 The data is coming from the csv which is then plotted using matplotlib.数据来自 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_())

Any help will be highly appreciated!任何帮助将不胜感激!

When you use matplotlib with Qt you don't have to use pyplot but the axes.当您将 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_())

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM