使用mplfinance绘制动态更新K线图遇阻,求旧图更新方法
解决mplfinance动态更新K线图重复生成新图表的问题
默认调用fplt.plot()时,每次都会创建新的Figure对象,导致数据更新时弹出新窗口。要实现动态更新,核心是复用同一个绘图容器(Figure和Axes),具体操作如下:
初始化绘图容器
先创建一次Figure和Axes对象,后续更新时复用:
import mplfinance as fplt import pandas as pd import matplotlib.pyplot as plt # 仅初始化一次绘图容器 fig, ax = plt.subplots() # 初始数据构建(替换为你的实际初始数据) date_list = [] # 时间序列数据 open_price = [] high_price = [] low_price = [] close_price = [] df = pd.DataFrame( {'Open': open_price, 'High': high_price, 'Low': low_price, 'Close': close_price}, index=date_list ) # 首次绘图,指定使用已创建的ax fplt.plot(df, type='candle', title='EUR_USD', ylabel='Price ($)', ax=ax)
动态更新数据与图表
当数据更新后,执行以下代码复用已有Axes,清除旧内容并绘制新图:
# 替换为你的最新数据 new_date_list = [] new_open = [] new_high = [] new_low = [] new_close = [] # 构建更新后的DataFrame df_updated = pd.DataFrame( {'Open': new_open, 'High': new_high, 'Low': new_low, 'Close': new_close}, index=new_date_list ) # 关键:指定ax并设置clear=True清除旧内容 fplt.plot(df_updated, type='candle', title='EUR_USD', ylabel='Price ($)', ax=ax, clear=True) # 触发图表刷新 plt.pause(0.01) # 短暂暂停确保界面刷新,时间可按需调整
注意事项
- 不要在每次更新时重复创建
fig, ax,只需要初始化一次。 - 如果是循环持续更新数据,将更新代码放入循环内即可,每次更新后调用
plt.pause()或fig.canvas.draw()刷新。
内容的提问来源于stack exchange,提问作者Cho
相关产品推荐
相关产品推荐

