需要修改一下,我每次调用图像函数都只会往里面传入两个数值,一个表示当前的电压值或者电流值,一个表示当前时间值,然后我不断的调用图像函数,不断的传入,然后在图形上形成曲线
时间: 2024-03-12 13:48:00 浏览: 113
好的,那我们可以修改程序中的`plot_data`函数,将它改为接收两个参数:当前电压值和时间值。然后将这些值添加到一个列表中,每次调用`plot_data`函数时,将列表中的所有值都绘制出来,这样就能形成曲线了。
以下是修改后的程序:
```python
import sys
import random
import matplotlib.pyplot as plt
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy
from PyQt5.QtCore import QTimer
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 设置窗口标题和大小
self.setWindowTitle("多曲线图")
self.setGeometry(100, 100, 800, 500)
# 创建图形对象
self.fig = Figure(figsize=(5, 4), dpi=100)
# 添加一张子图
self.ax1 = self.fig.add_subplot(111)
# 添加第二个y轴
self.ax2 = self.ax1.twinx()
# 设置图形标题和轴标签
self.ax1.set_title("电压/电流图")
self.ax1.set_xlabel("时间")
self.ax1.set_ylabel("电压")
self.ax2.set_ylabel("电流")
# 设置曲线的颜色和标签
self.line1, = self.ax1.plot([], [], color='red', label="最大电压")
self.line2, = self.ax1.plot([], [], color='blue', label="最小电压")
self.line3, = self.ax2.plot([], [], color='green', label="电流")
# 添加图例
self.ax1.legend(loc="upper left")
self.ax2.legend(loc="upper right")
# 创建画布并将图形对象添加到画布上
self.canvas = FigureCanvas(self.fig)
self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.setCentralWidget(self.canvas)
# 创建定时器
self.timer = QTimer(self)
self.timer.timeout.connect(self.plot_data)
self.timer.start(1000) # 每隔1秒刷新一次
# 初始化数据列表
self.data = {"time": [], "vmax": [], "vmin": [], "current": []}
def plot_data(self, vmax=0, vmin=0, current=0, time=0):
# 将数据添加到列表中
self.data["time"].append(time)
self.data["vmax"].append(vmax)
self.data["vmin"].append(vmin)
self.data["current"].append(current)
# 更新曲线数据
self.line1.set_data(self.data["time"], self.data["vmax"])
self.line2.set_data(self.data["time"], self.data["vmin"])
self.line3.set_data(self.data["time"], self.data["current"])
# 重新计算曲线的界限
self.ax1.relim()
self.ax1.autoscale_view()
self.ax2.relim()
self.ax2.autoscale_view()
# 刷新画布
self.canvas.draw()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
window.plot_data(vmax=5, vmin=3, current=2, time=0) # 绘制初始数据
sys.exit(app.exec_())
```
这个程序也会创建一个窗口,窗口中包含一个图形,图形上有三条曲线,两条曲线对应左边的y轴,一条曲线对应右边的y轴。每隔1秒钟,程序会调用`plot_data`函数,将当前的电压值和时间值传入。程序会将这些值添加到一个列表中,然后重新绘制曲线。
你可以根据你的需求修改程序中的数据更新函数,将每次传入的电压和时间值添加到数据列表中即可。
阅读全文