如何在基于set_ydata的Tkinter-Matplotlib绘图中添加第二条曲线?
如何在Tkinter的Matplotlib动态图中添加第二条曲线?
要在同一张图里加第二条动态曲线,核心思路是初始化时多创建一个线对象,之后在更新函数里分别更新两条线的y轴数据就行。另外你的原代码里还有几个小问题需要修正:比如array_pressure_1未定义、重复触发update_plot导致重复更新。
下面是修改后的完整代码:
import tkinter as tk from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk) import numpy as np stroke=30 conrod=75 bore=40 def update_plot(): # 生成两条曲线的新随机数据 y1 = 100 * np.random.rand(50) y2 = 60 * np.random.rand(50) # 更新第一条曲线的y数据 lines[0].set_ydata(y1) # 更新第二条曲线的y数据 lines[1].set_ydata(y2) # 重绘画布 canvas.draw() window.after(25, update_plot) # 25ms后再次更新,约40FPS def main(): global window global canvas global lines x = np.linspace(0, stroke, 50) # 初始化两条曲线的初始y数据 y1_initial = 100 * np.random.rand(50) y2_initial = 60 * np.random.rand(50) window = tk.Tk() window.title('Plotting in Tkinter') window.geometry("500x500") fig = Figure(figsize = (4, 4), dpi = 100) canvas = FigureCanvasTkAgg(fig, master = window) canvas.draw() canvas.get_tk_widget().pack() plot1 = fig.add_subplot(111) # 绘制两条曲线,lines会存储两个线对象 lines1, = plot1.plot(x, y1_initial, label='曲线1') lines2, = plot1.plot(x, y2_initial, label='曲线2') lines = [lines1, lines2] # 添加图例区分两条曲线 plot1.legend() # 只需要调用一次after来启动更新循环,不需要直接调用update_plot window.after(25, update_plot) window.mainloop() if __name__ == '__main__': main()
关键修改点:
- 初始化时绘制两条曲线,把两个线对象存入
lines列表 - 在
update_plot中分别更新两条线的ydata - 移除了重复调用
update_plot的代码,避免重复触发更新 - 添加了图例,方便区分两条曲线
- 修复了原代码中未定义变量的问题
内容的提问来源于stack exchange,提问作者Riccardo
相关产品推荐
相关产品推荐

