2017-07-22 77 views
1

此代码从Google财经中获得一条直线的坐标,并将第三个点放置在相同的距离上。有很多回溯ValueError:ordinal必须大于等于1

dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC)
ValueError: ordinal must be >= 1

发生

import datetime as dt 
from datetime import timedelta as td 
import matplotlib.pyplot as plt 
from matplotlib import style 
import pandas as pd 
import pandas_datareader.data as web 
import numpy as np 

start = dt.datetime(2017, 7, 1) 
end = dt.datetime(2017, 3, 1) 

# retrieving data from google 
df = web.DataReader('TSLA', 'google', start,) 

Dates = df.index 
Highs = df['High'] # Getting only the values from the 'High' Column. 

Highest_high = np.amax(Highs) # returns the Highest value 
     for i, h in enumerate(Highs): 
      if h == Highest_high : 
       Highests_index = i 
#Highests_index = Highs.argmax() # returns the index of Highest value 

Highest_high_2 = sorted(Highs)[-2] 
for i, j in enumerate(Highs): 
     if j == Highest_high_2 : 
     Highests_index_2 = i 

#================Problem Maybe starting from here======================== 

x = [Highests_index, Highests_index_2] 
y = [Highest_high, Highest_high_2] 
coefficients = np.polyfit(x, y, 1) 

polynomial = np.poly1d(coefficients) 
# the np.linspace lets you set number of data points, line length. 
x_axis = np.linspace(3,Highests_index_2 + 1, 3) 
y_axis = polynomial(x_axis) 

plt.plot(x_axis, y_axis) 
plt.plot(x[0], y[0], 'go') 
plt.plot(x[1], y[1], 'go') 
plt.plot(Dates, Highs) 
plt.grid('on') 
plt.show() 

以下错误上面的代码效果很好,当我刚绘制的数值,而无需使用datetime和大熊猫。我认为这个问题可能在datetime或matplotlib中。

我知道这个问题可能看起来是重复的,但我无法将我的问题与其他任何解决方案联系在一起。

回答

0

对不起,其实错误发生是由于第三行。我删除了plt.plot()Dates, Highs)而一切工作就像魅力!

1

错误是由于matplotlib无法找到沿x轴的x轴值的位置。

来自前两行的图表具有x轴的数值,而第三行试图在同一轴上绘制datetime。在绘制第三行plt.plot(Dates, Highs)时,matplotlib会尝试查找日期的x轴位置,并因错误而失败。

相关问题