我想用pandas代码生成的数值用py QT 5做一个界面并让这些数值绘成折线图,记得要先做一个按钮再生成折线图就图片里的这种,(折线图不用动态的
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_())
我可以给你写一个外壳,然后你自己补充获取数据的部分,行不行?