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

Datetime转Matplotlib日期导致K线图显示异常

解决Matplotlib绘制K线图的日期转换与显示异常问题

问题根源分析

  1. 日期格式化字符串错误:你使用了%H:%m:%S,其中%m代表月份,分钟的正确格式符是%M,这会导致x轴时间标签显示混乱。
  2. K线宽度设置不合理:candlestick_ohlc的width参数单位是天,你的K线是15分钟周期,15分钟换算成天为15/(24*60)≈0.0104,设置0.6会导致K线严重重叠。
  3. 日期转换的效率问题:虽然你的日期转换数值正确,但逐行apply的方式可以替换为更高效的批量转换方法。

修正后的完整代码

import matplotlib.pyplot as plt
from mplfinance.original_flavor import candlestick_ohlc
import pandas as pd
import matplotlib.dates as mpdates

# 假设df已加载完成,且openDateTime为datetime64[ns]类型
# 批量转换日期为Matplotlib支持的格式
df['openDateTime'] = mpdates.date2num(df['openDateTime'].dt.to_pydatetime())

# 创建子图
fig, ax = plt.subplots(figsize=(10,6))

# 绘制K线:设置适配15分钟周期的宽度
candlestick_ohlc(ax, df.values, width=15/(24*60),
                 colorup='green', colordown='red', 
                 alpha=0.8)

# 显示网格
ax.grid(True)

# 设置标签
ax.set_xlabel('DateTime')
ax.set_ylabel('Price')

# 修正日期格式化规则:%M代表分钟
date_format = mpdates.DateFormatter('%d-%m-%Y %H:%M:%S')
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate()

fig.tight_layout()

# 显示图表
plt.show()

若使用Unix毫秒时间戳的转换方法

如果你的数据包含毫秒级Unix时间戳(openTimeUnixMs列),可以直接按以下方式转换:

# 将毫秒时间戳转换为datetime,再转成Matplotlib日期格式
df['openDateTime'] = mpdates.date2num(pd.to_datetime(df['openTimeUnixMs'], unit='ms'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:47