我想用pandas代码生成的数值用py QT 5做一个界面并让这些数值绘成折线图

我想用pandas代码生成的数值用py QT 5做一个界面并让这些数值绘成折线图,记得要先做一个按钮再生成折线图就图片里的这种,(折线图不用动态的

img

img


那个获取值得代码是这的,这个代码还要在一个xlsx文件那里获取信息

img


img

QChart 绘制折线图。

Python 将列表数据生成折线图(Pandas使用)
如有帮助,望采纳

#!/user/bin/env python
# coding=utf-8
"""
@project : csdn
@author  : 剑客阿良_ALiang
@file   : draw_pic.py
@ide    : PyCharm
@time   : 2022-03-23 09:38:28
"""
import pandas as pd
from matplotlib import pyplot as plt
 
_dates = ['2022-03-22 16:45:08', '2022-03-22 16:46:08', '2022-03-22 16:47:08', '2022-03-22 16:48:08',
          '2022-03-22 16:49:08', '2022-03-22 16:50:08', '2022-03-22 16:51:08', '2022-03-22 16:52:08',
          '2022-03-22 16:53:08', '2022-03-22 16:54:08']
_data1 = [1, 2, 4, 6, 3, 2, 5, 7, 8, 0]
_data2 = [0, 9, 8, 2, 1, 0, 6, 5, 2, 1]
 
di = pd.DatetimeIndex(_dates,
                      dtype='datetime64[ns]', freq=None)
 
pd.DataFrame({'data1': _data1},
             index=di).plot.line()  # 图形横坐标默认为数据索引index。
#
plt.savefig(r'data/p1.png', dpi=200)
plt.show()  # 显示当前正在编译的图像
 
pd.DataFrame({'data1': _data1, 'data2': _data2},
             index=di).plot.line()  # 图形横坐标默认为数据索引index。
#
plt.savefig(r'data/p2.png', dpi=200)
plt.show()  # 显示当前正在编译的图像

是要做一个界面,按按钮显示折线图吗

代码如下,不知能否满足你的要求,你替换代码中的X,y数据就行

# -*- coding: utf-8 -*-
from PyQt5.QtGui import *
import sys
import matplotlib

matplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QSizePolicy, QWidget,QDialog,QPushButton
from numpy import arange, sin, pi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt


class MyMplCanvas(FigureCanvas):
    """FigureCanvas的最终的父类其实是QWidget。"""
    def __init__(self, parent=None, width=5, height=4, dpi=100):

        # 配置中文显示
        plt.rcParams['font.family'] = ['SimHei']  # 用来正常显示中文标签
        plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

        self.fig = Figure(figsize=(width, height), dpi=dpi)  # 新建一个figure
        self.axes = self.fig.add_subplot(111)  # 建立一个子图,如果要建立复合图,可以在这里修改

        self.axes.hold(False)  # 每次绘图的时候不保留上一次绘图的结果

        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)

        FigureCanvas.updateGeometry(self)

    '''绘制静态图,可以在这里定义自己的绘图逻辑'''

    def start_static_plot(self,x,y):
        self.fig.suptitle('测试图')
        self.axes.plot(x, y)
        self.axes.set_ylabel('Y轴')
        self.axes.set_xlabel('X轴')
        self.axes.grid(True)





class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        layout = QVBoxLayout()

        self.btn1 = QPushButton("Button1")
        # 对于需要传参的函数,需要使用lambda表示
        self.btn1.clicked.connect(self.showgraph)
        layout.addWidget(self.btn1)

        self.setLayout(layout)
        self.setWindowTitle("Map demo")

    def showgraph(self):
        self.win = QWidget()
        self.layout = QVBoxLayout(self.win)
        self.mpl = MyMplCanvas(self.win, width=5, height=4, dpi=100)
        self.layout.addWidget(self.mpl)
        x = range(1,11)
        y = range(1,11)
        self.mpl.start_static_plot(x,y)
        self.win.show()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    btnDemo = Form()
    btnDemo.show()
    sys.exit(app.exec_())

我可以给你写一个外壳,然后你自己补充获取数据的部分,行不行?