Datetime转Matplotlib日期导致K线图显示异常
解决Matplotlib绘制K线图的日期转换与显示异常问题
问题根源分析
- 日期格式化字符串错误:你使用了
%H:%m:%S,其中%m代表月份,分钟的正确格式符是%M,这会导致x轴时间标签显示混乱。 - K线宽度设置不合理:
candlestick_ohlc的width参数单位是天,你的K线是15分钟周期,15分钟换算成天为15/(24*60)≈0.0104,设置0.6会导致K线严重重叠。 - 日期转换的效率问题:虽然你的日期转换数值正确,但逐行
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
相关产品推荐
相关产品推荐

