Python 在现有主窗口上,在PyQt GUI上选择组合框选项时显示图形

Python 在现有主窗口上,在PyQt GUI上选择组合框选项时显示图形,python,user-interface,matplotlib,pyqt5,distribution,Python,User Interface,Matplotlib,Pyqt5,Distribution,因此,我试图基本上建立一种工具,允许我从数据框中选择一列,当我从组合框中选择该列时,显示该列分布的图形应该显示在同一窗口中。我不知道该怎么办 这是我的组合框的外观: 我需要能够在同一窗口中显示图形(分布) 如何进行此操作?下面是一个示例,演示如何使用组合框在同一窗口中的数据框中绘制列中的数据 from PyQt5 import QtWidgets from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as Figure

因此,我试图基本上建立一种工具,允许我从数据框中选择一列,当我从组合框中选择该列时,显示该列分布的图形应该显示在同一窗口中。我不知道该怎么办

这是我的组合框的外观:

我需要能够在同一窗口中显示图形(分布)


如何进行此操作?

下面是一个示例,演示如何使用组合框在同一窗口中的数据框中绘制列中的数据

from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
import pandas as pd
import os

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.combo = QtWidgets.QComboBox()
        self.combo.addItem("Choose a field")
        self.button = QtWidgets.QPushButton('Read csv file')

        # axes and widget for plotting and displaying the figure
        self.fig, self.ax = plt.subplots()
        self.figure_widget = FigureCanvas(self.fig)
        plt.tight_layout()

        # set up layout
        vlayout = QtWidgets.QVBoxLayout(self)
        hlayout = QtWidgets.QHBoxLayout()
        hlayout.addWidget(self.combo)
        hlayout.addWidget(self.button)
        hlayout.addStretch(2)
        vlayout.addLayout(hlayout)
        vlayout.addWidget(self.figure_widget)

        self.button.clicked.connect(self.read_data)
        self.combo.currentTextChanged.connect(self.field_changed)

    def read_data(self):
        dialog = QtWidgets.QFileDialog(self, directory=os.curdir, caption='Open data file' )
        dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptOpen)
        dialog.setFileMode(QtWidgets.QFileDialog.ExistingFile)
        if dialog.exec():
            # read data and add columns to combo box
            file = dialog.selectedFiles()[0]
            self.data = pd.read_csv(file)
            self.combo.clear()
            self.combo.addItem("Choose a field")
            for field in self.data.columns:
                self.combo.addItem(field)
            self.combo.setCurrentIndex(0)

    def field_changed(self, field):
        self.ax.clear()
        if field in self.data.columns:
            self.data.plot(y=field, ax=self.ax)
            self.ax.set_ylabel(field)
            self.ax.set_xlabel('index')
        plt.tight_layout()
        self.fig.canvas.draw()


if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    widget = Widget()
    widget.show()
    app.exec()

事实上,我想展示一个seaborn countplot,那么会有什么不同呢@Heike@ArvindSudheer实际上没有那么多。最主要的变化是,不使用
self.data.plot(…)
而使用类似于
sns.countplot(x=field,data=self.data,ax=self.ax)