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

如何在Python的mplfinance绘图中添加图片、价格标签并调整时间轴空白

mplfinance设置ylim图表消失及相关需求解决方案

问题原因

设置ylim后图表消失主要有两个常见原因:

  • 传入的ylim数值范围未覆盖收盘价的实际波动区间,所有数据被挤出显示范围
  • 开启volume=True后未单独设置成交量副图的显示范围,或参数传递格式错误

具体解决方法

1. 正确设置ylim实现y轴留白

先基于收盘价数据计算合理的上下限,再分别传入主图ylim和成交量副图volume_ylim参数,同时关闭tight_layout避免和自定义留白参数冲突:

# 计算收盘价上下10%的范围作为主图ylim,确保数据在显示区间内
close_min = df['Close'].min()
close_max = df['Close'].max()
ylim_padding = (close_max - close_min) * 0.1
main_ylim = (close_min - ylim_padding, close_max + ylim_padding)

# 计算成交量的范围,同样留10%留白
vol_min = df['Volume'].min()
vol_max = df['Volume'].max()
vol_padding = (vol_max - vol_min) * 0.1
vol_ylim = (vol_min - vol_padding, vol_max + vol_padding)

# 调整后的plot调用
mpf.plot(df, type='line',
          title='Test',
          linecolor='white',
          style=styles,
          volume=True,
          figsize=(8, 6),
          figscale=0.5,
          fill_between=filledShape, 
          tight_layout=False, # 关闭自动布局避免覆盖自定义留白
          scale_padding={'left': 1, 'top': 5, 'right': 1, 'bottom': 2},
          ylim=main_ylim, # 主图y轴范围
          volume_ylim=vol_ylim # 成交量副图y轴范围
          )

2. 时间轴(x轴)增加留白

  • 如果是要时间范围前后留空白:可以在df首尾新增几行对应时间的空数据(数值列设为NaN),或者传入xlim参数扩展x轴的时间范围
  • 如果是要时间轴下方的边距留白:直接调大scale_padding里的bottom参数数值即可,数值越大留白越多

3. 添加价格标签

通过mpf.make_addplot()构造标记图层,再传入plot方法的addplot参数:

# 示例:标记所有收盘价高于90分位的点
label_points = df['Close'].where(df['Close'] > df['Close'].quantile(0.9))
# 创建标记图层,设置标记样式和标注文本
tag_plot = mpf.make_addplot(label_points, type='scatter', marker='^', markersize=100, color='red',
                            secondary_y=False,
                            annotations=[(idx, val, f'{val:.2f}') for idx, val in label_points.dropna().items()])

# 在mpf.plot调用中新增参数 addplot=[tag_plot] 即可

4. 添加自定义图片

在调用mpf.plot时设置returnfig=True拿到matplotlib的画布和轴对象,再用matplotlib原生方法添加图片:

from PIL import Image
import numpy as np

# 读取要添加的图片
custom_img = np.array(Image.open('你的本地图片路径.png'))
# 绘图时获取画布对象
fig, axlist = mpf.plot(df, ... , returnfig=True)
# 在画布指定位置添加图片,后两个参数对应左上角的像素坐标,可按需调整
fig.figimage(custom_img, 10, fig.bbox.ymax - 100, zorder=100)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:01