如何在matplotlib中用vlines绘制日期范围?

时间:2016-11-26 03:23:20

标签: date matplotlib plot

这个问题的答案似乎与我的问题有关,但是,它适用于ax.bar()而不是ax.vlines。

Matplotlib DateFormatter for axis label not working

以下代码适用于ax1.vlines(x,l,h,colors =' k')和ax2.vlines(x,0,v,colors =' k' )在股票图表中绘制垂直价格和交易量。但水平轴由numpy数组x = 0,1,2,3,...等定义。我在数组 d 中有datetime对象但是如果更改为ax1.vlines(d,l) ,h,colors =' k')和ax2.vlines(d,0,v,colors =' k')然后它会抛出错误。因此 d 已定义,但未在下面的代码中使用(它不会使用 d 工作,但它在引用中使用 x 工作代码行)。

    import datetime
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt

    df = pd.read_csv(PATH+ticker+EXT, usecols=[0,2,3,4,5], header=None,
                     engine='python',skiprows=skr,skipfooter=skf)
    d = pd.to_datetime(df[0]) # numpy array date
    h = df[2].values # numpy array high
    l = df[3].values # numpy array low
    c = df[4].values # numpy array close
    v = df[5].values # numpy array volume
    x = np.arange(len(d))
    # Draw Chart to White Background        
    ax1_y_label = ticker
    fig1 = plt.figure()
    fig1.set_size_inches(WIDE,TALL)
    fig1.set_dpi(DTPI)
    fig1.autofmt_xdate()
    ax1 = plt.subplot2grid((5,4), (0,0), rowspan=4, colspan=4)
    ax1.set_ylabel(ax1_y_label)
    ax1.grid(True)
    ax1.vlines(x, l, h, colors='k')
    ax1.hlines(c, x, x+0.3, color='k')
    ax2 = plt.subplot2grid((5,4), (4,0), sharex=ax1, rowspan=1, colspan=4)
    ax2.set_ylabel(ax2_y_label)
    ax2.grid(True)
    ax2.vlines(x, 0, v, colors='k')
    ax1.spines['top'].set_visible(False)
    ax1.spines['right'].set_visible(False)
    ax2.spines['right'].set_visible(False)
    plt.setp(ax1.get_xticklabels(), visible=False)
    plt.setp(ax1.get_yticklabels(), visible=False)
    plt.setp(ax2.get_yticklabels(), visible=False)
    plt.subplots_adjust(hspace=.01)

0 个答案:

没有答案