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 (将#修改为@)