
为什么用matplotlib画股价图
做股票和期货交易,看K线图是家常便饭。券商的软件虽然方便,但如果你想按自己的思路定制图表,或者把技术指标、交易信号直接标在图上,用Python的matplotlib库自己画,自由度最高。它能把收盘价、均线、成交量甚至买卖点都画在一张图上,帮你把数据变成看得懂的图形。
matplotlib是Python里最常用的绘图库,上手不难,代码量也不大。你不需要是程序员,只要会一点Python基础,跟着下面的步骤就能画出专业的股价图。
准备数据和工具
第一步是拿到股价数据。常用的免费数据源有yfinance、tushare等。以yfinance为例,安装好库之后,用几行代码就能下载一只股票的历史数据。期货数据也可以用类似的方法获取,很多期货公司提供API接口。

拿到数据后,一般包含日期、开盘价、最高价、最低价、收盘价和成交量。用pandas整理成DataFrame,把日期设为索引,方便后续绘图。
画收盘价折线图
最简单的股价图就是收盘价折线图。用matplotlib的plot函数,x轴是日期,y轴是收盘价,几行代码就能出图。记得设置标题、坐标轴标签,让图看起来更专业。
import matplotlib.pyplot as plt
import yfinance as yf
df = yf.download('AAPL', start='2023-01-01', end='2023-12-31')
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['Close'])
plt.title('AAPL Close Price')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.grid(True)
plt.show()
这段代码会画出苹果公司2023年的收盘价走势。把'AAPL'换成其他股票代码,就能看不同标的。期货代码需要根据数据源调整。
加入均线让趋势更清晰
单看收盘价,波动大时容易眼花。加上移动平均线(MA),比如5日、20日均线,能帮你过滤噪音,看清趋势。计算均线用pandas的rolling函数,再画到同一张图上。
df['MA5'] = df['Close'].rolling(5).mean()
df['MA20'] = df['Close'].rolling(20).mean()
plt.plot(df.index, df['Close'], label='Close')
plt.plot(df.index, df['MA5'], label='MA5')
plt.plot(df.index, df['MA20'], label='MA20')
plt.legend()
均线金叉(短期均线上穿长期均线)常被视为买入信号,死叉则相反。在图上标出这些点,交易决策更直观。
用子图展示成交量
成交量是股价的燃料,放量上涨和缩量上涨意义不同。用matplotlib的subplots创建两个子图,上面画价格,下面画成交量柱状图。
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)
ax1.plot(df.index, df['Close'])
ax1.set_ylabel('Price')
ax2.bar(df.index, df['Volume'], color='gray')
ax2.set_ylabel('Volume')
plt.show()
这样价格和成交量对齐,方便观察量价配合。期货交易中,持仓量也可以类似处理。
标出买卖信号
有了价格和均线,可以在图上用箭头或标记标出买卖点。比如当MA5上穿MA20时,在对应日期画一个绿色向上箭头;下穿时画红色向下箭头。用matplotlib的scatter或annotate函数实现。
df['Signal'] = 0
df.loc[df['MA5'] > df['MA20'], 'Signal'] = 1
df['Position'] = df['Signal'].diff()
buy_signals = df[df['Position'] == 1]
sell_signals = df[df['Position'] == -1]
ax1.scatter(buy_signals.index, buy_signals['Close'], marker='^', color='g', s=100, label='Buy')
ax1.scatter(sell_signals.index, sell_signals['Close'], marker='v', color='r', s=100, label='Sell')
ax1.legend()
这些信号只是示例,你可以根据自己策略调整。期货交易中,注意杠杆和保证金,信号要结合风险管理。
保存和分享图表
画好的图可以用savefig保存为图片,方便复盘或分享。设置dpi参数提高清晰度。
plt.savefig('stock_chart.png', dpi=300, bbox_inches='tight')
进阶技巧:K线图和实时更新
matplotlib本身不直接支持K线图,但可以用mplfinance库(基于matplotlib)轻松画K线。安装后调用plot函数即可。实时更新的话,可以用FuncAnimation动态刷新,适合盯盘。
别被代码吓到,从简单的收盘价图开始,慢慢加功能。画图的过程也是理解市场的过程,图形会说话,关键是你得会听。
避开常见坑
日期作为x轴时,注意格式转换,用pandas的to_datetime处理。数据缺失值要提前填充或删除,否则图会断线。均线计算时,起始几天是NaN,画图时自动忽略。期货合约有换月问题,连续合约要拼接,否则价格跳空会误导。
把图画出来,把指标加上,把信号标上,你的交易决策就有了可视化依据,比拍脑袋强得多。