微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ValueError: x 和 y 必须具有相同的第一维,但具有形状 (100,) 和 (396,)

如何解决ValueError: x 和 y 必须具有相同的第一维,但具有形状 (100,) 和 (396,)

我正在尝试使用 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 举报,一经查实,本站将立刻删除。