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

matplotlib使用矩形补丁绘制K线图时x轴xtick日期显示异常如何解决

问题原因

  1. 你当前x轴使用的是自定义整数Days_num(距离起始日的天数),不属于matplotlib日期模块可识别的日期格式,因此mdates.AutoDateLocator()配置完全不生效。
  2. set_xticklabels被错误放在for循环内部,会被重复执行覆盖配置;且你没有提前指定x轴刻度的位置,直接设置标签会出现位置不匹配问题,最终只能显示前几个日期。
  3. 原代码函数定义后缺少必要缩进,会直接触发语法报错。

修正后可运行代码

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import yfinance as yf
import numpy as np

df = yf.download('adaniports.ns', '2015-01-01', '2016-01-01')
df.rename(columns={'Adj Close': 'Adj_close'}, inplace=True)

def candlestick(df, colorup='#2bff1c', colordown='#ff5e00'):
    df.reset_index(inplace=True)
    df['Days_num'] = df.Date.apply(lambda x: x - df.Date[0])
    df.set_index('Date', inplace=True)
    df.Days_num = df.Days_num.apply(lambda x: x/np.timedelta64(1, 'D')).astype(int)

    fig, ax = plt.subplots(figsize=(12, 8))
    ax.plot([df.Days_num, df.Days_num], [df.High, df.Low], color='k', solid_capstyle='round', linewidth=0.8)
    
    for x in range(len(df.index)):
        if df.Close[x] > df.Open[x]:
            color = colorup
        else:
            color = colordown
        rec = mpl.patches.Rectangle((df.Days_num[x] - 0.25, df.Open[x]), 0.5, (df.Close[x] - df.Open[x]), facecolor=color,
                                   edgecolor='k', linewidth=0.5, capstyle='round', zorder=3)
        ax.add_patch(rec)
    
    # 配置x轴刻度,步长20可按需调整
    tick_step = 20
    ax.set_xticks(df.Days_num[::tick_step])
    ax.set_xticklabels([x.strftime('%d-%m-%y') for x in df.index[::tick_step]])
    ax.grid(True)
    fig.tight_layout()
    fig.autofmt_xdate()
    plt.show()

candlestick(df)

调整说明

  • 修正了函数内部代码的缩进问题
  • 删除了不生效的mdates.AutoDateLocator()配置
  • 将x轴刻度配置移到for循环外部,先匹配刻度位置再设置对应日期标签
  • 可通过修改tick_step参数调整x轴标签的显示密度,数值越小显示的日期越多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:12:01