
安装与导入库
绘制K线图离不开强大的第三方库,mplfinance是专为金融数据可视化设计的库,它基于matplotlib构建,提供了简洁的API。安装过程非常简单,通过pip命令即可完成:
pip install mplfinance
导入库时,通常还需要pandas来处理数据,numpy用于数值计算,matplotlib用于自定义调整。

import pandas as pd
import numpy as np
import mplfinance as mpf
import matplotlib.pyplot as plt
数据准备
K线图的数据结构要求包含日期(DatetimeIndex)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)以及成交量(Volume)。数据可以从Yahoo Finance、东方财富等数据源获取,或者使用本地CSV文件。
下面是一个示例,演示如何从Yahoo Finance下载数据并转换为mplfinance所需的格式:
import yfinance as yf
# 下载股票数据
df = yf.download('AAPL', start='2023-01-01', end='2023-06-30')
# 重命名列以满足mplfinance要求
df.columns = ['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume']
# 确保索引为DatetimeIndex
df.index = pd.to_datetime(df.index)
# 检查数据
df.head()
若使用本地数据,确保CSV文件包含上述列,并使用pd.read_csv读取,然后设置日期列为索引。
绘制基础K线图
使用mplfinance的plot函数可以快速生成K线图。最基本的调用方式如下:
mpf.plot(df, type='candle', volume=True, title='AAPL Stock Price')
type='candle'指定绘制蜡烛图(即K线图),volume=True在下方添加成交量子图。这样就能得到一张带有成交量的K线图。
为了更好的显示效果,可以调整图形尺寸:
mpf.plot(df, type='candle', volume=True, figsize=(10, 6), title='AAPL Stock Price')
添加移动平均线
技术分析中常用移动平均线来识别趋势。mplfinance允许通过mav参数添加多条移动平均线。
mpf.plot(df, type='candle', volume=True, mav=(5, 10, 20), title='AAPL with MA')
这里的mav接受一个元组,分别计算5日、10日、20日移动平均线,并在图中以不同颜色显示。
自定义图表样式
mplfinance提供了多种预设样式,例如'charles'、'nightclouds'、'yahoo'等,可以通过style参数指定。
mpf.plot(df, type='candle', volume=True, style='charles', title='AAPL Custom Style')
还可以自定义颜色,例如将阳线(收盘价高于开盘价)设为红色,阴线设为绿色(国内习惯),需要创建自定义样式:
custom_style = mpf.make_marketcolors(up='red', down='green', edge='inherit', wick='inherit', volume='inherit')
mpf_style = mpf.make_mpf_style(marketcolors=custom_style)
mpf.plot(df, type='candle', volume=True, style=mpf_style, title='AAPL Custom Colors')
添加更多技术指标
mplfinance支持通过addplot函数添加自定义指标,例如布林带、MACD等。先计算指标,然后将其添加到一条或多条线段中。
以布林带为例:
# 计算简单移动平均和标准差
ma20 = df['Close'].rolling(20).mean()
std20 = df['Close'].rolling(20).std()
# 上轨和下轨
upper = ma20 + 2 * std20
lower = ma20 - 2 * std20
# 创建addplot对象
ap = [
mpf.make_addplot(upper, color='blue'),
mpf.make_addplot(lower, color='blue'),
]
# 绘制
mpf.plot(df, type='candle', addplot=ap, volume=True, title='AAPL with Bollinger Bands')
对于MACD指标,需要计算DIF、DEA和MACD柱,然后以不同方式显示。
处理非交易日期
股票数据中可能包含非交易日(如周末、节假日),这些日期在图表中会导致断开。mplfinance提供了show_nontrading参数来控制是否显示非交易日。
mpf.plot(df, type='candle', show_nontrading=False)
设置为False时,图表会跳过非交易日,使走势连续。
交互式图表
mplfinance本身不直接支持交互,但可以结合plotly实现。plotly的candlestick图表提供缩放的交互功能。
import plotly.graph_objects as go
fig = go.Figure(data=[go.Candlestick(x=df.index,
open=df['Open'], high=df['High'],
low=df['Low'], close=df['Close'])])
fig.update_layout(title='AAPL Interactive Candlestick Chart')
fig.show()
这种方式适合在Web端展示。
保存图表
使用mpf.plot时可以通过savefig参数保存图表为图片文件:
mpf.plot(df, type='candle', volume=True, savefig='aapl.png')
对于plotly,使用fig.write_image()保存。
常见问题及解决
在绘制过程中可能会遇到一些常见问题。若数据包含NaN值,可能导致绘图失败,先删除或填充。日期索引必须为DatetimeIndex,否则报错。若成交量列不存在,设置volume=False。
# 处理NaN
df = df.dropna()
利用Python结合mplfinance库,可以高效地绘制出专业且美观的股票K线图,并且能够轻松集成各种技术指标,为量化分析和交易决策提供有力的视觉支持。