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

仅用Matplotlib创建K线图:小实体蜡烛vlines显示异常求助

使用Matplotlib绘制K线图时小实体蜡烛vlines显示异常的问题

我仅用Matplotlib创建K线图时,遇到小实体蜡烛位置vlines显示异常的问题,希望有经验者提供解决方案。

我的实现代码如下:

fig, axs = plt.subplots(1)

fig.set_size_inches(12.0, 6.0)

axs.vlines(df.index, df['Start_g'], df['End_g'], color='green', linestyle='-', lw=10)
axs.vlines(df.index, df['Start_r'], df['End_r'], color='red', linestyle='-', lw=10)

axs.vlines(df.index, df['Low_g'], df['High_g'], color='green', linestyle='-', lw=1)
axs.vlines(df.index, df['Low_r'], df['High_r'], color='red', linestyle='-', lw=1)

plt.show()

当前输出效果:小实体蜡烛的vlines显示异常,线条出现错位、模糊的情况。
尝试设置dpi为200(fig.set_dpi(200))后,小实体蜡烛的显示有所改善,但出现蜡烛相互重叠的问题。


解决方案

问题根源在于用vlines绘制K线实体时,线宽(lw)是固定像素值,当x轴刻度间距较小时,过宽的线条会相互重叠;而小实体蜡烛的Start和End值接近,vlines的绘制逻辑容易出现显示错位。推荐改用以下两种更可靠的方式:

1. 结合bar绘制实体,vlines绘制上下影线

这种方式更贴合K线的结构,实体用柱状图绘制,避免线宽带来的重叠问题:

import matplotlib.pyplot as plt
import pandas as pd

# 先区分涨跌,计算实体的上下边界
df['color'] = ['green' if close >= open else 'red' for open, close in zip(df['Open'], df['Close'])]
df['body_top'] = df[['Open', 'Close']].max(axis=1)
df['body_bottom'] = df[['Open', 'Close']].min(axis=1)

fig, ax = plt.subplots(figsize=(12, 6))

# 绘制K线实体
ax.bar(df.index, df['body_top'] - df['body_bottom'], bottom=df['body_bottom'], 
       color=df['color'], width=0.6)  # width可根据x轴数据密度调整

# 绘制上下影线
ax.vlines(df.index, df['Low'], df['High'], color=df['color'], lw=1)

plt.show()

2. 使用专业金融绘图库mplfinance

如果允许使用第三方库,mplfinance是专门用于绘制金融K线的工具,能完美解决这类显示问题:

import mplfinance as mpf

# 传入包含Open/Close/High/Low的DataFrame,直接绘制蜡烛图
mpf.plot(df, type='candle', figratio=(12,6), style='yahoo')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:52