← 返回学习中心

📊 从数据到图表

matplotlib 静态图 vs ECharts 交互图 · 同一份豆粕数据,两种画法 · 2026-06-30
Python 负责拿数据,浏览器负责画交互图,HTML 是中间的载体

1一个关键误区

很多人以为"Python 画图"是 Python 自己把图显示出来。其实要分两种情况:

静态图:matplotlib 把图画成一张图片文件(PNG),你看的是图片。
交互图:Python 只是生成一个 HTML 文件,真正把图画到屏幕、还能让你缩放悬停的,是浏览器里的 JavaScript(ECharts)

所以你上次看到"最终产物是个 HTML"——这不是多此一举,而是交互图的必然载体:能交互的图只能活在浏览器里。

2整条链路

不管哪种画法,前半段都一样(Python 拿数据、算指标),区别只在最后"画"这一步交给谁:

取数akshare 拉行情Python
算指标MA5/MA20、信号Python
生成文件PNG 或 HTMLPython
画出来看图片 / 浏览器渲染你 / 浏览器
关键转折在第 3 步:交互图这里写出的是 HTML,里面同时装着数据给 ECharts 的画图指令。Python 写完文件就"退场"了,后面是浏览器接手。

3同一份豆粕数据,两种画法

下面两张图用的是完全相同的豆粕(M0)最近 150 个交易日数据,只是画法不同。先感受差别:

🖼️ 静态图 · matplotlib / mplfinance一张图片,不能交互
豆粕 matplotlib 静态K线图

👆 这是一张 PNG 图片。优点:截图就能发、写报告直接贴、加载快。缺点:死的——不能放大局部、不能悬停看某天数值、不能切换品种。

🖱️ 交互图 · ECharts可缩放 / 悬停 / 拖动

👆 这是浏览器现场画的。把鼠标移上去看某天数值,用底部滑块或滚轮缩放局部——同样的数据,活了。代价是需要浏览器、需要加载 ECharts 库。

4这些名字都是啥

名字是什么用什么语言写产物
matplotlibPython 最经典的画图库,万能但偏静态Python图片 / 窗口
mplfinance基于 matplotlib,专画金融 K 线的封装,一行画蜡烛+均线+成交量Python图片
ECharts浏览器里的交互图表库(Apache 开源,原百度)JavaScript网页里的图
pyechartsECharts 的"Python 包装",纯写 Python 就能生成 ECharts 的 HTML,不用碰 JSPythonHTML
关系记一句话:mplfinance 是 matplotlib 的 K 线版;pyecharts 是 ECharts 的 Python 版。上次的交互图我手写了 JavaScript(为了让你看清原理),实际项目里多数人直接用 pyecharts,纯 Python 出活。

5三种写法的代码对照

假设数据已经在 df 里(akshare 取的豆粕),画同样一张 K 线图:

A. mplfinance —— 出静态图片(最省事)

# df 需要 Open/High/Low/Close 列,索引是日期 import mplfinance as mpf mpf.plot(df, type="candle", mav=(5, 20), volume=True, savefig="豆粕.png") # 直接存成图片

B. pyecharts —— 纯 Python 出交互 HTML(推荐进阶)

from pyecharts.charts import Kline from pyecharts import options as opts k = (Kline() .add_xaxis(df["日期"].tolist()) .add_yaxis("豆粕", df[["开盘价","收盘价","最低价","最高价"]].values.tolist()) .set_global_opts(datazoom_opts=[opts.DataZoomOpts()])) k.render("豆粕.html") # 生成可交互的 HTML

C. 手写 ECharts —— 自由度最高(我上次用的)

// 在 HTML 里,把数据塞给 ECharts const chart = echarts.init(document.getElementById('chart')); chart.setOption({ xAxis:{type:'category', data:dates}, yAxis:{scale:true}, series:[{type:'candlestick', data:kline}] });
给你的建议:学习阶段先用 A(mplfinance)——两行出图,专注看走势和信号,别被画图细节拖住。等你想要"看盘式"地缩放探索、或想把图嵌进这个 HTML 知识库,再上 B(pyecharts)。手写 JS(C)等以后真有定制需求再说。

6该用哪个?

你的场景选它
在终端/Jupyter 里快速瞄一眼走势、跑策略时看结果mplfinance(静态)
写复盘报告、发给别人、贴进文档mplfinance 存 PNG
想缩放、悬停、切换品种,"看盘式"探索pyecharts / ECharts(交互)
要把图嵌进这个 HTML 学习库pyecharts / ECharts
一句话:akshare 管"拿数据",画图库管"画成图",HTML 是交互图必然的载体。静态看得快,交互玩得深,按需要选。

7工具选型路线(给你的建议)

别被这么多名字吓到。按"现在该用哪个"排一下,照着走就行:

工具定位对你的建议
mplfinancematplotlib 的 K线版,两行出静态图现在用,学习期主力,专注看走势和信号
ECharts(已就绪)浏览器里的交互图🟦 模板我已帮你搭好,想"玩着看"时打开
pyecharts纯 Python 生成 ECharts 的 HTML缓一缓,等你要批量产交互页、不想碰 JS 时再学,半小时上手
TradingView 图表库交易级专业看盘图表(实时、画线)🚩 专业级,现在用不上,知道它是"专业看盘那种"即可
纠正一个常见误解:专业看盘软件(文华、同花顺、币安、TradingView 网页版)的 K 线,多数不是 ECharts,而是为"tick 级实时、海量K线流畅缩放"专门优化的引擎(行业标准是 TradingView 系)。ECharts 能画 K 线、适合学习和展示,但和"交易级看盘图"是两类东西。
一句话路线:现在 mplfinance 快速看图 → 想交互探索用 ECharts(已就绪)→ 以后批量产页再学 pyechartsTradingView 是专业级,放最远。重心永远是"看懂趋势和信号",不是画图技术。