Нет ничего плохого в вашем коде. Проблема с данными. Если вы посмотрите на данные, то обнаружите, что от даты к объему объектов ваши данные представляют собой строку, подобную этой: data = '2017-07-26,153.3500,153.9300,153.0600,153.5000,153.5000,12778195.00'. Это представление строки. Поэтому сначала вам нужно выполнить некоторую предварительную обработку. Для этого могут быть разные методы. Я нашел этот метод полезным для меня:
Сначала вы должны удалить запятые в данных и заменить их пробелами, а затем использовать функцию разделения для преобразования данных в формат разделения.
Итак Вам нужно внести следующие изменения в свой код:
date = []
closep = []
for i in range(len(stock_data)):
temp = stock_data[i].replace(',', ' ').split()
date.append(temp[0])
closep.append(temp[2])
0 и два - это позиции даты и закрытия в вашем наборе данных.
Теперь вместо 'x' и 'closep' как вы использовали в своем методе построения графика, используйте эти «date» и «closep», которые я только что поделился с вами с помощью кода.
Еще одна вещь заключается в том, что у графика возникают проблемы с этим большим набором данных, я думаю. Поэтому используйте date [0: 100], closep [0: 100], чтобы попробовать график для меньшего набора данных.
Полный код будет выглядеть так:
import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates
import datetime
def graph_data():
fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
stock_price_url =
'https://pythonprogramming.net/yahoo_finance_replacement'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('\n')
for line in split_source[1:]:
stock_data.append(line)
date = []
closep = []
for i in range(len(stock_data)):
temp = stock_data[i].replace(',', ' ').split()
date.append(temp[0])
closep.append(temp[2])
ax1.plot_date(date[0:100], closep[0:100], '-', linewidth=0.1)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Graph')
plt.show()
graph_data()
Надеюсь, это поможет.