烛台的日期索引格式化程序

时间:2014-04-28 16:55:34

标签: python graph matplotlib

我想在使用matplotlib绘制股票数据图表时删除周末之间的“差距”。我能够做到这一点,结果如下图所示:

enter image description here

现在,当我尝试在x轴上运行索引格式化程序时,我得到的只是一个空白画布。任何人都可以弄清楚我在做错了什么吗?如果我注释掉FuncFormatter行,那么一切都会再次发挥作用。

#Build parameters for candlestick graph. Adjust dates so that they are graphed equi-distant on chart
x = 0
y = len(date)
ind = np.arange(y)

candleAr = []
while x < y:
    appendLine = ind[x], openp[x], closep[x], highp[x], lowp[x], volume[x]
    candleAr.append(appendLine)
    x+=1

def format_date(x, pos=None):
    thisind = np.clip(int(x+0.5), 0, y-1)
    return candleAr.date[thisind].strftime('%Y-%m-%d')

#Define plot area and candlestick chart
fig = plt.figure(facecolor='w')
ax1 = plt.subplot2grid((1,1), (0,0), axisbg='w')
candlestick(ax1, candleAr, width=0.8, colorup='#9eff15', colordown='#ff1717')
ax1.xaxis.set_major_formatter(mticker.FuncFormatter(format_date))
fig.autofmt_xdate()
plt.show()

1 个答案:

答案 0 :(得分:2)

对于任何有兴趣的人,以下是我必须编写format_date函数才能使其工作的原因:

def format_date(x, pos=None):
        newdate = mdates.num2date(date[int(x)])

        if newdate.strftime('%m') == '02':
            return newdate.strftime('%b\n%Y')
        else: return newdate.strftime('%b')