You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib和Python绘制带百分比Y轴的K线与趋势线

基于Matplotlib的双轴金融图表解决方案

核心思路

K线的价格尺度和百分比变化的尺度差异极大,必须用双Y轴布局:左轴对应BNBUSDT的价格(绘制K线),右轴对应资产的百分比变化(绘制趋势线),同时共享X轴保证时间对齐。

完整代码实现

import matplotlib.pyplot as plt
import pandas as pd

# 假设已准备好以下数据:
# df_ohlc: BNBUSDT的OHLC数据,包含datetime, Open, High, Low, Close列
# df_assets: 包含datetime列和三种资产的百分比变化列(按公式计算完成)

# 1. 统一时间格式(转为matplotlib可识别的datetime类型)
df_ohlc['datetime'] = pd.to_datetime(df_ohlc['datetime'])
df_assets['datetime'] = pd.to_datetime(df_assets['datetime'])

# 2. 创建双轴画布
fig, ax1 = plt.subplots(figsize=(12, 6))
ax2 = ax1.twinx()  # 共享X轴的次坐标轴

# 3. 绘制BNBUSDT K线图
# 定义K线实体颜色
df_ohlc['bar_color'] = ['green' if close >= open else 'red' for open, close in zip(df_ohlc['Open'], df_ohlc['Close'])]
# 绘制K线实体
ax1.bar(df_ohlc['datetime'],
        abs(df_ohlc['Close'] - df_ohlc['Open']),
        bottom=df_ohlc[['Open', 'Close']].min(axis=1),
        color=df_ohlc['bar_color'],
        width=0.02)  # 根据时间粒度调整宽度(日K设0.2,小时K设0.02)
# 绘制高低点影线
for _, row in df_ohlc.iterrows():
    ax1.plot([row['datetime'], row['datetime']], [row['Low'], row['High']], color=row['bar_color'], linewidth=1)

# 4. 绘制三种资产的百分比变化趋势线
ax2.plot(df_assets['datetime'], df_assets['asset1_pct'], label='资产1', color='blue', linewidth=1.5)
ax2.plot(df_assets['datetime'], df_assets['asset2_pct'], label='资产2', color='orange', linewidth=1.5)
ax2.plot(df_assets['datetime'], df_assets['asset3_pct'], label='资产3', color='purple', linewidth=1.5)

# 5. 调整图表样式
ax1.set_xlabel('时间')
ax1.set_ylabel('BNBUSDT 价格')
ax2.set_ylabel('资产百分比变化 (%)')
ax1.grid(True, alpha=0.3)
ax2.legend(loc='upper left')
plt.xticks(rotation=45)
plt.tight_layout()  # 自动调整布局,避免图形溢出
plt.show()

关键问题修复点

  • K线位置/大小异常:通过width参数精准控制K线实体宽度,用bottom参数确保实体从开盘/收盘价的较低值开始绘制,解决偏移问题。
  • 图形溢出截断:用figsize设定画布尺寸,配合plt.tight_layout()自动调整元素间距,避免坐标轴标签、图例被截断。
  • 尺度不匹配干扰:双轴布局彻底分离价格和百分比两个不同量级的数据,避免互相覆盖或挤压。

内容的提问来源于stack exchange,提问作者NoahVerner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:57:50