Python初学者如何绘制股票Candlestick(K线)图?
Python绘制股票K线(蜡烛图)的实现方案
首先澄清:Matplotlib本身没有内置K线图的直接绘制接口,但可以通过其生态扩展库或者第三方财经绘图库快速实现,以下是三种常用的可落地方案:
方案1:使用Matplotlib生态专属金融绘图库 mplfinance(最推荐新手使用)
mplfinance是官方维护的、完全基于Matplotlib开发的金融图表库,专门优化了K线、成交量、均线等常见股票图表的绘制逻辑,不需要手动处理图形元素渲染。
- 安装命令:
pip install mplfinance - 最简使用示例:
import pandas as pd import mplfinance as mpf # 要求传入的DataFrame需满足: # 1. 索引为日期格式(需提前用parse_dates解析) # 2. 包含列名严格为Open、High、Low、Close的四列(开/高/低/收价) # 可选包含Volume列绘制成交量 stock_data = pd.read_csv("你的股票数据路径.csv", index_col="交易日期", parse_dates=True) # 绘制K线图,type参数指定为candle即蜡烛图 mpf.plot( stock_data, type="candle", title="标的K线走势", ylabel="价格(元)", volume=True, # 同时绘制成交量子图 mav=(5,10,20) # 同时绘制5、10、20日均线 )
支持自定义蜡烛颜色、添加自定义指标线、标记买卖点等所有Matplotlib支持的个性化配置。
方案2:原生Matplotlib手动实现(适合需要高度自定义渲染逻辑的场景)
如果不想额外安装第三方库,也可以直接用Matplotlib的矩形、线段元素手动拼接K线:
每个K线由两部分组成:
- 上下影线:用黑色线段连接当日最高价和最低价
- 实体部分:用矩形表示,收盘价高于开盘价填充红色(上涨),反之填充绿色(下跌)
核心代码示例:
import matplotlib.pyplot as plt # ohlc为按时间排序的列表,每个元素为(时间序号, 开盘价, 最高价, 最低价, 收盘价) ohlc = [ (1, 10.2, 10.8, 10.1, 10.7), (2, 10.7, 11.3, 10.6, 11.2), # 后续替换为你的实际数据 ] width = 0.6 fig, ax = plt.subplots(figsize=(12,6)) for idx, open_p, high_p, low_p, close_p in ohlc: # 绘制上下影线 ax.plot([idx, idx], [low_p, high_p], color="black", linewidth=1) # 绘制实体部分 body_height = abs(close_p - open_p) body_bottom = min(open_p, close_p) color = "red" if close_p > open_p else "green" ax.add_patch(plt.Rectangle((idx - width/2, body_bottom), width, body_height, color=color)) ax.set_xlabel("交易日期") ax.set_ylabel("价格(元)") plt.show()
方案3:使用交互式绘图库Plotly(适合需要交互式分析的场景)
如果需要可缩放、悬停查看详细数据、支持网页嵌入的K线图,可以使用Plotly库:
- 安装命令:
pip install plotly - 使用示例:
import plotly.graph_objects as go import pandas as pd stock_data = pd.read_csv("你的股票数据路径.csv", parse_dates=["交易日期"]) fig = go.Figure(data=[go.Candlestick( x=stock_data["交易日期"], open=stock_data["Open"], high=stock_data["High"], low=stock_data["Low"], close=stock_data["Close"] )]) fig.update_layout(title="股票K线走势", xaxis_title="交易日期", yaxis_title="价格") fig.show()
内容的提问来源于stack exchange,提问作者Shreyansh Agrawal
相关产品推荐
相关产品推荐

