首页 > 解决方案 > mplfinance 图未正确显示时间值

问题描述

我关于 Stackoverflow 的第一个问题。希望格式满足 Stackoverflow 的要求。

我正在学习 Python 并使用“mplfinance”来绘制 5 分钟的股票价格,但 x 轴上的时间不对。我的测试代码如下。该图的时间轴是“ 18:05, 18:30, 18:55, 19:20, 19:45, 20:10, 20:35 ”,它们根本不显示在数据文件中。我从雅虎提取了截至 2020 年 12 月 4 日(或 12 月 5 日)的 3 天数据,并在经过一些简单处理后绘制了最后 35 个点。(如果你在不同的日子运行程序,时间轴会不同)

感谢您的帮助和启发!

import pandas as pd
import yfinance as yf
import mplfinance as mpf

def plot_5min_chart():
        # 5-minute data
        mdata = yf.download('DDD', period='3d', interval='5m')
        mdata = pd.DataFrame(mdata)
        mdata['10ma'] = mdata['Close'].rolling(window=10, min_periods=0).mean()
        mdata['20ma'] = mdata['Close'].rolling(window=20, min_periods=0).mean()
        mdata['50ma'] = mdata['Close'].rolling(window=50, min_periods=0).mean()
        mdata.dropna(inplace=True)
        mdata.to_csv('test_5minute.csv')

        # plot 5-minute chart
        mpf.figure()
        ntl2 = 35
        kwargs = dict(type='candle', volume=True, figratio=(8,5),
                      figscale=0.85, num_panels=3, panel_ratios=(6,2,2))
        ap2 = [
            mpf.make_addplot(mdata['10ma'].tail(ntl2), width=2, linestyle='-', color='lime', panel=0),
            mpf.make_addplot(mdata['20ma'].tail(ntl2), width=2, linestyle='--', color='c', panel=0),
            mpf.make_addplot(mdata['50ma'].tail(ntl2), width=2, linestyle='-', color='orange', panel=0),
        ]
        titlem = '5-minute chart'
        mpf.plot(mdata.tail(ntl2),**kwargs, addplot=ap2, style='charles', title=titlem,
                 savefig=dict(fname='5minutechart.png', dpi=800, pad_inches=8)
                 )

plot_5min_chart()

测试 5 分钟图表

标签: pythonmplfinance

解决方案


我认为这与 mplfinance 中的已知错误相同,此处报告:https ://github.com/matplotlib/mplfinance/issues/236

现已发布此修复程序。获取最新代码: pip install --upgrade mplfinance

如果有人依赖旧行为(使用时区信息,当存在时,在日期时间索引中转换为 UTC),他们可以通过在调用时设置kwargtz_localize=Falsempf.plot()来访问旧行为。

新行为是忽略日期时间索引中的 tzinfo 并始终根据日期时间索引中的本地时间进行绘图。


推荐阅读