python Matplotlib candlestick plot仅适用于日常数据,而不适用于日内数据

2024-04-26 20:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用matplotlib绘制烛台数据。从1分钟的数据开始,我用pd.计时器在不同的时间范围内,从5分钟到每天,但绘图只适用于每天的数据。下面是我使用的1分钟数据示例:

**Data sample:** (pandas dataframe)

data_indexed_5M = data_indexed.groupby([pd.TimeGrouper(freq=pd.offsets.Minute('5'))]).agg({'<LOW>': lambda s: s.min(), 
                                     '<HIGH>': lambda s: s.max(),
                                     '<OPEN>': lambda s: s[0],
                                     '<CLOSE>': lambda s: s[-1]})

ata_indexed_Daily = data_indexed.groupby([pd.TimeGrouper(freq='D')]).agg({'<LOW>': lambda s: s.min(), 
                                     '<HIGH>': lambda s: s.max(),
                                     '<OPEN>': lambda s: s[0],
                                     '<CLOSE>': lambda s: s[-1]})

data_indexed_Daily['Date2'] = data_indexed_Daily['dateTime'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
data_indexed_Daily = data_indexed_Daily.set_index('dateTime')

data_indexed_5M['Date2'] = data_indexed_5M['dateTime'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
data_indexed_5M = data_indexed_5M.set_index('dateTime')


def plotWithMatplot(dataevento):
    deltatime = timedelta(minutes=100*5)  #...(days=100) for daily plot

    pre_data = dataevento - deltatime
    post_data= dataevento + deltatime

    data_slice = data_indexed_5M.loc[pre_data:post_data]   #data_indexed_Daily --> for daily plot

    tuples = [tuple(x) for x in     data_slice[['Date2','<OPEN>','<HIGH>','<LOW>','<CLOSE>']].values]

    fig, ax = plt.subplots()
    ax.xaxis_date()
    ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d %H:%M:"))    

    plt.xticks(rotation=45)
    plt.xlabel("Date")
    plt.ylabel("Price")
    plt.title("EURUSD 5M")
    candlestick_ohlc(ax, tuples, width=.6, colorup='g', alpha =.4);

    plt.show()

但当我在每天和5分钟(或任何其他日内时间范围)绘制相同事件时,我得到以下结果:

每日(良好结果):

enter image description here

日内(不良结果):

enter image description here


Tags: 数据lambdaclosedatadatetimepltopenax
1条回答
网友
1楼 · 发布于 2024-04-26 20:27:28

似乎candlestick_ohlc的未记录的width参数是关键。乘以每个数据点之间的一天的分数。由于您的数据是以分钟为单位递增的,因此应该做到:

candlestick_ohlc(ax, tuples, width=.6/(24*60), colorup='g', alpha =.4);

注意这是一个常见问题解答,尽管链接并不明显。参见:

相关问题 更多 >