杰瑞科技汇

如何用Python Tushare绘制数据图表?

安装必要的库

你需要确保已经安装了 tushare, pandas, matplotlibmplfinance,如果还没有安装,可以通过 pip 进行安装:

如何用Python Tushare绘制数据图表?-图1
(图片来源网络,侵删)
pip install tushare pandas matplotlib mplfinance

第一步:获取 Tushare Pro API Token

Tushare 已经升级到了 Pro 版本,需要注册账号并获取一个 API Token 才能使用,新用户有免费的积分额度,足够学习和使用。

  1. 访问 Tushare Pro 官网 并注册/登录。
  2. 在个人中心找到你的 API Token。

第二步:设置 Token 并获取股票数据

下面是一个完整的示例,展示如何获取某只股票的历史数据,并使用不同的方法进行画图。

我们将以获取 平安银行 (000001.SZ) 2025年的日线数据为例。

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import mplfinance as mpf
# 1. 设置你的 Tushare Pro API Token
#    请将 'YOUR_API_TOKEN' 替换成你自己的 Token
ts.set_token('YOUR_API_TOKEN')
# 2. 初始化 pro 接口
pro = ts.pro_api()
# 3. 获取股票数据
#    ts_code: 股票代码, '000001.SZ' 是平安银行
#    start_date: 开始日期, '20250101'
#    end_date: 结束日期, '20251231'
#    adj: 复权类型, 'qfq' 表示前复权,这是最常用的
df = pro.daily(ts_code='000001.SZ', start_date='20250101', end_date='20251231', adj='qfq')
# 4. 数据预处理
#    Tushare 返回的数据中,日期是列名,我们需要将其设为索引,并转换为 datetime 格式
#    这样才能被 matplotlib 和 mplfinance 正确识别
df trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
#    mplfinance 要求列名必须是标准的 'Open', 'High', 'Low', 'Close', 'Volume'
#    我们对列名进行重命名
df.rename(columns={
    'open': 'Open',
    'high': 'High',
    'low': 'Low',
    'close': 'Close',
    'vol': 'Volume'  # 成交量
}, inplace=True)
#    按日期升序排列,这对于画图很重要
df.sort_index(inplace=True)
# 打印处理后的数据前5行,检查一下
print("处理后的数据预览:")
print(df.head())

第三步:使用 Matplotlib 画图

matplotlib 是 Python 最基础、最强大的绘图库,我们可以用它来绘制各种自定义的金融图表。

如何用Python Tushare绘制数据图表?-图2
(图片来源网络,侵删)

示例1:绘制 K 线图 + 成交量

这是一个比较经典的组合图,通常将 K 线图放在上方,成交量放在下方。

# 创建一个图形和两个子图 (一个用于K线,一个用于成交量)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(14, 10), 
                                gridspec_kw={'height_ratios': [3, 1]}) # 设置子图高度比例
# --- 绘制 K 线图 ---
# 使用 mplfinance 的内置画图函数,因为它能很好地处理K线图的样式
mpf.plot(df, 
         type='candle',  # 'candle' 表示K线图
         ax=ax1,         # 指定到第一个子图
         volume=ax2,     # 指定成交量到第二个子图
         style='yahoo',  # 使用 'yahoo' 风格
         title='平安银行 (000001.SZ) 2025年 K线图与成交量')
# --- 手动绘制成交量 ---
# 上面已经用 mpf.plot 绘制了成交量,这里展示如何手动绘制,以便更好地理解
# ax2.bar(df.index, df['Volume'], color='gray', width=0.8)
# ax2.set_title('Volume')
# ax2.set_ylabel('Volume')
# 调整布局,防止标签重叠
plt.tight_layout()
plt.show()

示例2:绘制移动平均线 (MA)

移动平均线是技术分析中非常重要的指标,我们可以在 K 线图的基础上叠加 MA 线。

# 计算移动平均线
df['MA5'] = df['Close'].rolling(window=5).mean()   # 5日均线
df['MA20'] = df['Close'].rolling(window=20).mean() # 20日均线
df['MA60'] = df['Close'].rolling(window=60).mean() # 60日均线
# 创建一个新的图形
plt.figure(figsize=(14, 7))
# 绘制收盘价
plt.plot(df.index, df['Close'], label='Close Price', color='k', alpha=0.7)
# 绘制移动平均线
plt.plot(df.index, df['MA5'], label='MA5', color='blue', linestyle='--')
plt.plot(df.index, df['MA20'], label='MA20', color='orange', linestyle='-')
plt.plot(df.index, df['MA60'], label='MA60', color='green', linestyle='-.')
和标签'平安银行 (000001.SZ) 收盘价与移动平均线')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend() # 显示图例
# 旋转 x 轴日期标签,防止重叠
plt.xticks(rotation=45)
# 调整布局并显示
plt.tight_layout()
plt.show()

第四步:使用 Mplfinance 画图

mplfinance 是一个专门为金融数据分析设计的绘图库,它基于 matplotlib,但提供了更简单、更专业的接口来绘制 K 线图及其各种技术指标。

示例3:绘制带移动平均线的 K 线图

mplfinance 让添加技术指标变得非常简单。

如何用Python Tushare绘制数据图表?-图3
(图片来源网络,侵删)
# 创建一个新的图形
plt.figure(figsize=(14, 7))
# 使用 mplfinance 的 plot 函数
# addplot 参数用于添加额外的技术指标
mpf.plot(df, 
         type='candle',      # K线图
         style='yahoo',      # 样式
         title='平安银行 (000001.SZ) 带移动平均线的K线图',
         volume=True,        # 显示成交量
         mav=(5, 20, 60),    # 一行代码添加多条移动平均线 (MA5, MA20, MA60)
         figratio=(14, 7))   # 设置图形宽高比
plt.show()

示例4:绘制 MACD 指标图

MACD 是另一个非常流行的技术指标。mplfinance 同样可以轻松绘制。

# 创建一个新的图形
plt.figure(figsize=(14, 7))
# 使用 mplfinance 的 plot 函数
# 另一个技术指标示例:MACD
mpf.plot(df, 
         type='candle',
         style='yahoo',
         title='平安银行 (000001.SZ) MACD 指标图',
         volume=True,
         mav=(20, 60),
         figratio=(14, 7),
         # 添加 MACD 指标
         # macfs 是一个包含三个元素的元组 (macd, signal, histogram)
         # 我们这里只绘制 MACD 和 Signal 线
         addplot=[
             mpf.make_addplot(df['MA20'], color='orange', width=1.5),
             mpf.make_addplot(df['MA60'], color='green', width=1.5),
             # 如果想绘制 MACD,需要先计算
             # macd = df['Close'].ewm(span=12).mean() - df['Close'].ewm(span=26).mean()
             # signal = macd.ewm(span=9).mean()
             # mpf.make_addplot(macd, color='fuchsia', width=1.5),
             # mpf.make_addplot(signal, color='blue', width=1.5),
         ])
plt.show()

注意mplfinance 内置了一些指标,但对于更复杂的指标(如 MACD、RSI),你需要先计算出来,然后使用 mpf.make_addplot() 函数将其添加到图表中,上面的注释部分展示了如何计算并添加 MACD 指标。


总结与对比

特性 Matplotlib Mplfinance
优点 极度灵活,可以绘制任何类型的图表,组合自由度极高,是所有 Python 绘图库的基石。 专业、简洁,专为金融数据设计,一行代码即可完成复杂的 K 线图、成交量、技术指标组合。
缺点 绘制金融图表(如K线)代码量较大,需要手动处理很多细节。 灵活性相对较低,主要用于标准的金融图表,自定义复杂样式可能不如 Matplotlib 方便。
适用场景 - 需要高度自定义的图表。
- 将金融数据与其他非金融数据结合分析。
- 学术研究或非标准可视化。
- 快速生成标准的 K 线图、成交量图、各种技术指标图。
- 量化分析报告。
- 日常盯盘和技术分析。

推荐做法

对于大多数金融数据可视化需求,mplfinance 是首选,因为它简单、高效且专业,当你需要 mplfinance 无法满足的、高度定制化的图表时,再回到 matplotlib 进行“从零开始”的绘制。

希望这个详细的教程能帮助你掌握使用 tushare 和 Python 进行金融数据画图!

分享:
扫描分享到社交APP
上一篇
下一篇