#python #matplotlib
Вопрос:
Я могу строить графики с помощью простых массивов, таких как диапазон(10), но когда я пытаюсь использовать данные, загружаемые с фондового рынка, мой код не отображает данные.
Это выходные данные приведенного ниже кода: https://i.stack.imgur.com/tljfv.png
Я знаю, что этот код правильно извлекает данные, потому что он печатает. Пожалуйста, дайте мне знать, если вы можете помочь или у вас есть какие-либо указания.
# importing the required module
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
# import requests
import requests
filename = '/mnt/c/Users/jaspe/Documents/GitHub/python/uglek-stocks/output.png'
api_key = '<<APIKEYHERE>>'
symbol = 'TSLA'
url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILYamp;symbol=' symbol 'amp;apikey=' api_key
print(url)
# fetch stock data
r = requests.get(url)
data = r.json()
# get time series
ts = data['Time Series (Daily)']
# y axis values
y = [0] * 100
count = 0
for d in ts:
# get daily price
value = int(float(ts[d]['1. open']))
y[count] = value # assign to y value
count count 1
# plotting the points
plt.figure(figsize=(7,5))
plt.plot(range(100), y)
# naming the x and y axis
plt.ylabel('Open')
plt.xlabel('Days')
# giving a title to my graph
plt.title('TSLA')
# save to file
plt.savefig(filename)
Комментарии:
1. Вы уверены, что правильно читаете значения? Кроме того, вы уверены, что «проблема» не в ваших данных? Возможно, первое значение слишком велико, и вам нужен масштаб журнала, чтобы действительно увидеть остальные.
Ответ №1:
В python нам обычно не нужны такие переменные «счетчика», но если вы к этому привыкли, то вам следует обновить его в своем цикле. В настоящее время у вас есть
counter counter 1
но я думаю, ты имел в виду
counter = 1
Это должно решить вашу проблему, если предположить, что ваша value
переменная правильно извлечена из вашей структуры данных.
Более питонический способ использования счетчика-использовать enumerate
так:
for i, d in enumerate(ts.keys()):
value = int(float(ts[d]['1. open']))
y[i] = value # assign to y value
или, что еще лучше, используйте понимание списка
y = [int(float(ts[d]['1. open'])) for d in ts.keys()]
x = range(len(y))
plt.figure(figsize=(7,5))
plt.plot(x, y)
Примечание: приведенные выше альтернативы не проверены, и их отладка для ваших данных может привести вас к другим вопросам SO.