Как построить график данных с помощью Python с помощью matplotlib.pyplot

#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.