Построение прогноза погоды с использованием matplotlib - PullRequest
0 голосов
/ 19 мая 2019

Я хочу построить график температуры, показывающий весь день. Ось X должна быть часами, а ось Y ° C.

Я хотел бы использовать MatPlotLib для этой задачи. Но, возможно, есть лучшее решение для этого. С точки зрения обновления в реальном времени текущей температуры, чтобы сравнить прогноз и текущие значения. Я прошел учебник, но не могу понять, как получить доступ к этим значениям из прогноза. Я смог получить эти наборы данных и распечатать их с помощью цикла for. Но, как уже упоминалось, графический метод построения графиков был бы великолепен.

Я попробовал некоторые базовые черчения с использованием MatPlotLib и попробовал учебники.

from pyowm import OWM
import matplotlib.pyplot as plt
import numpy as np

API_key = 'XXXXXXXXXXXXXXX'

owm = OWM(API_key)

obs = owm.weather_at_place('LOCATION')

fc = owm.three_hours_forecast('LOCATION')

f = fc.get_forecast()

plt.plot(f) #How do I get the temp value out of f

plt.xlabel('h')
plt.ylabel('°C')

plt.title("Temperature")

plt.legend()

plt.show()

1 Ответ

1 голос
/ 20 мая 2019

Я быстро проанализировал примеры pyOWM , и похоже, что pyowm уже предоставляет хороший синтаксис для XML / JSON, который предоставляется openweathermap.org (см. пример XML данные для Лондона ).

Проще говоря, строка fc.get_forecast() возвращает прогнозируемый объект, который может быть повторен по (т. Е. for weather in f:), и который имеет функции для получения даты прогноза как объекта datetime, и температура в Кельвинах. Теперь вам нужно только сохранить оба (например, в простых списках times и temps) и быть готовыми к печати. Обратите внимание на вызов fig.autofmt_xdate(), который заставляет метки оси X вращаться и красиво форматировать.

полный код:

from pyowm import OWM
import matplotlib.pyplot as plt
import numpy as np

API_key = 'XXXXXXXXXXXXXXX'
owm = OWM(API_key)

fc=owm.three_hours_forecast('London,GB')
f = fc.get_forecast()

times=[]
temps=[]
for weather in f:
    date=weather.get_reference_time('date')
    times.append(date)
    t_kelvin=weather.get_temperature()['temp']## get temperature in kelvin
    temps.append(t_kelvin-273.15) ## convert to celsius
    print(date,t_kelvin-273.15) ## just to show what's happening

fig,ax=plt.subplots()
ax.plot(times,temps,label='forecast')

ax.set_ylabel('°C')
ax.set_title('Temperature')
ax.legend()
fig.autofmt_xdate()
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...