问题描述
我正在尝试使用 matplotlib 绘制图形。但我一直面临以下错误:ValueError: x and y must have same first dimension,but have shapes (100,) and (396,)
这是我的代码:
import datetime as dt
import numpy as np
from pandas_datareader import data as web
from hmmlearn.hmm import GaussianHMM
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.dates import YearLocator,MonthLocator
import warnings
warnings.filterwarnings('ignore')
ticker = 'EA'
start = dt.date(2019,1,1)
end = dt.date.today()
stock = web.DataReader(ticker,'yahoo',start,end)
stock.reset_index(inplace=True,drop=False)
stock.drop(['Open','High','Low','Adj Close','Volume'],axis=1,inplace=True)
stock['Date'] = stock['Date'].apply(dt.datetime.toordinal)
stock = list(stock.itertuples(index=False,name=None))
dates = np.array([q[0] for q in stock],dtype=int)
close_val = np.array([q[1] for q in stock])
close = [close_val[j]/close_val[j-1] for j in range(1,len(close_val))]
fig,ax = plt.subplots(figsize=(12,8))
plt.title('Stock price over time (EA)',fontsize=14)
ax.plot_date(dates,close_val,'-',label='Close')
plt.gca().xaxis.set_major_locator(MonthLocator())
plt.xlabel('Date',fontsize=14)
plt.ylabel('Close (price',fontsize=14)
plt.legend()
ax.autoscale_view()
ax.grid(True)
fig.autofmt_xdate()
N = 5
train_x = list(map(lambda el:[el],close[:N]))
model = GaussianHMM(n_components=2,covariance_type='diag',n_iter=1000)
predicted_prices = []
predicted_dates = []
for idx in range(100):
model.fit(train_x)
state = model.predict(train_x)[-1]
means = model.means_[state]
current_price = stock[N+idx][1]
current_date = dt.date.fromordinal(dates[N+idx])
predicted_date = current_date + dt.timedelta(days=1)
predicted_dates.append(predicted_date)
train_x.append([means[0]])
predicted_prices.append(current_price * means[0])
train_x.pop(0)
print('Actual:',close_val[N+1:-246],'\n','Prediction:',predicted_prices)
plt.figure(figsize=(12,8))
plt.title('Close (price)',fontsize=14)
plt.plot(predicted_dates,predicted_prices)
plt.plot(predicted_dates,close_val[N+1:-246])
plt.legend(['Predicted','Actual'])
plt.grid(True)
plt.show()
导致错误的行是 plt.plot(predicted_dates,close_val[N+1:-246])
我不太确定是什么导致了这个错误,如果我删除上面的行,plt.show()
会运行,但它不会显示绘制在图表上的两条数据。
这是什么问题,我该如何解决?谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)