Matplotlib绘制K线图问题:Jupyter Notebook无法正常显示图表
解决Jupyter/Spyder中Matplotlib实时K线图不显示的问题
嘿,这个问题我在开发交易可视化工具时碰到过好多次,给你几个针对性的解决方案,应该能帮你搞定:
先搞定Jupyter的魔法命令
在你的代码最开头加上一行魔法命令,这是Jupyter显示Matplotlib图表的关键:- 如果只需要静态显示,用
%matplotlib inline - 如果要支持实时更新(比如你的K线图需要动态刷新),用
%matplotlib notebook
这行命令必须放在导入Matplotlib之前或者紧接着导入的位置,不然可能不生效。
- 如果只需要静态显示,用
实时更新的图表要加刷新逻辑
如果你是用循环来实时更新K线数据,光修改数据是不够的,必须手动触发图表刷新:import matplotlib.pyplot as plt # 先加魔法命令 %matplotlib notebook # 初始化图表 fig, ax = plt.subplots() # 假设这里是你的K线图初始化代码... # 实时更新循环 while True: # 更新K线数据的逻辑... fig.canvas.draw() # 重新绘制画布 plt.pause(0.01) # 暂停一小段时间让图表刷新注意
plt.pause()是必须的,它会让Matplotlib处理事件队列,不然图表会一直卡住不更新。Spyder环境的特殊处理
如果你在Spyder里遇到这个问题,先去设置里调整Graphics backend:- 打开Spyder的【Tools】→【Preferences】
- 找到【IPython console】→【Graphics】
- 把Backend改成
Automatic或者Qt5Agg
保存设置后重启Spyder,或者在代码开头手动切换后端:
import matplotlib.pyplot as plt plt.switch_backend('Qt5Agg')避免输出对象列表的小技巧
有时候代码执行后会输出一堆<matplotlib.lines.Line2D...>这类对象,这是因为你没有把绘图语句放在代码块末尾,或者没有加分号。比如把绘图的最后一行加上分号,就能抑制这种输出:ax.plot(open_prices, close_prices); # 加个分号就不会输出对象了
如果是用专门的K线库(比如mplfinance),记得也要配合正确的后端设置,mplfinance的实时更新模式需要notebook后端支持哦。
内容的提问来源于stack exchange,提问作者Flavio de Falcao e Helena
相关产品推荐
相关产品推荐

