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

Python读取CSV文件OHLC数据绘制K线图显示异常如何解决?

问题根因

你的代码核心问题是K线宽度参数不符合数据的时间粒度,另外存在可优化的依赖库选择问题:

  • 宽度单位不匹配:candlestick_ohlc的width参数单位为天,你的数据是1小时粒度的行情,1小时仅等于1/24≈0.04天,你原先设置的width=0.6相当于14.4小时的宽度,会导致相邻K线完全重叠,就是你截图里看到的异常显示效果。
  • 依赖库过时:你使用的mpl_finance已经官方停止维护,后续可能出现兼容性问题,更推荐使用官方新维护的mplfinance库绘制K线。
修正方案

方案1:不更换依赖库,仅调整参数

只需要修改candlestick_ohlc的width参数,同时可以补充X轴刻度定位规则,让时间显示更合理:

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from mpl_finance import candlestick_ohlc

import matplotlib.dates as mpl_dates
import matplotlib.pyplot as plt
import pandas as pd

import tkinter  as Tk


if __name__ == '__main__':
    root = Tk.Tk()
    root.title("candle")
    root.geometry('600x550')

    file  = 'Code.csv'

    data = pd.read_csv(file)
    ohlc = data.loc[:, ['Date', 'Open', 'High', 'Low', 'Close']]
    ohlc['Date'] = pd.to_datetime(ohlc['Date'])
    ohlc['Date'] = ohlc['Date'].apply(mpl_dates.date2num)
    ohlc = ohlc.astype(float)

    # Creating Subplots
    fig = plt.Figure(figsize=(6, 5), dpi=100)
    ax = fig.add_subplot(111)

    # 仅修改这里的width参数即可,0.035对应约50分钟宽度,留出少量间隙
    candlestick_ohlc(ax, ohlc.values, width=0.035, colorup='green', colordown='red', alpha=0.8)

    # Setting labels & titles
    ax.set_xlabel('Date')
    ax.set_ylabel('Price')
    fig.suptitle('Hourly Candlestick Chart ')

    # Formatting Date
    date_format = mpl_dates.DateFormatter('%d-%m-%Y %H:%M')
    ax.xaxis.set_major_formatter(date_format)
    # 新增:设置X轴每1小时显示一个刻度
    ax.xaxis.set_major_locator(mpl_dates.HourLocator(interval=1))
    fig.autofmt_xdate()

    fig.tight_layout()

    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.get_tk_widget().pack()

    root.mainloop()

方案2:更换为官方推荐的mplfinance库(更稳定)

首先安装依赖:pip install mplfinance
修正后代码如下:

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import mplfinance as mpf
import pandas as pd
import tkinter as Tk

if __name__ == '__main__':
    root = Tk.Tk()
    root.title("candle")
    root.geometry('600x550')

    file = 'Code.csv'
    data = pd.read_csv(file, index_col=0, parse_dates=True)
    data.index.name = 'Date'

    # 直接生成K线图的Figure对象
    fig, _ = mpf.plot(data, type='candle', style='yahoo',
                      title='Hourly Candlestick Chart',
                      ylabel='Price',
                      figratio=(6,5),
                      returnfig=True)

    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.get_tk_widget().pack()

    root.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:09:04