这个问题的答案似乎与我的问题有关,但是,它适用于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)