2017-06-08 1 views
-2

Ich muss die Zeit in der X-Achse mit Matplotlib, nicht Panda anzuzeigen. Die Y-Achse sollte die Temperatur anzeigen. Die Daten wurden von einer API generiert und extrahiert, bevor sie in eine multidimensionale Liste platziert wurden. Mein letzter Versuch ist unten. Die Uhrzeit wird nicht genau angezeigt.Warum ist es so schwierig, das richtige Format für Datum und Uhrzeit für Matplotlib zu finden

import matplotlib.pyplot as plt 
import numpy as np 
import urllib.request 
import json 
from datetime import datetime, timedelta, time 
import matplotlib 

def graph_data(): 

weather_api = 'http://api.openweathermap.org/data/2.5/forecast?q=London&id=' 
source_code = urllib.request.urlopen(weather_api) 
content = source_code.read() 
codes = json.loads(content.decode("utf8")) 

#get the data required and put it in an array called 'weather_data' 
weather_data=[] 

for each in codes['list']: 
    weather_data.append([ 
         each['dt_txt'], 
         each['weather'][0]['description'], 
         int(each['main']['humidity']), 
         float(each['wind']['speed']), 
         int(each['main']['temp_min']), 
         int(each['main']['temp_max'])]) 

#store the weather details for each day 
day1 = datetime.now()+timedelta(days=1) 
forecast_list = [] 

for each in weather_data: 
    date=datetime.strptime(each[0], '%Y-%m-%d %H:%M:%S') #convert string to date 
    if day1.day == date.day: 
     d=datetime.strptime(each[0],'%Y-%m-%d %H:%M:%S') 
#   time=d.strftime('%H:%M:%S') 
     forecast_list.append([d, each[4]]) 

time=[] 
temp=[] 

for each in forecast_list: 
    time.append(each[0]) 
    temp.append(each[1]) 
print(time) 

plt.plot(time, temp, label = 'Temperature') 
plt.gcf().autofmt_xdate() 
plt.xlabel('Time') 
plt.ylabel('Temperature') 
plt.title('Temperature for {0}'.format(day1.strftime('%Y-%d-%d'))) 
plt.legend() 
plt.show() 

graph_data() 
+1

definieren "nicht korrekt angezeigt". –

+0

zeigt einen Teil des Jahres und eine Zufallszahl – Nosh

+0

Bitte korrigieren Sie die Formatierung des Codes in der Frage: (1) der Einzug ist nicht richtig, (2) gibt es einige Unterschiede in der Eröffnung/Schließung von Anführungszeichen. – mkrieger1

Antwort

0

Sie sagen, „zeigt einen Teil des Jahres und eine Zufallszahl“ -wahrscheinlich es die Zeit genau angezeigt wird, sondern als fraktionierte Jahr. Welches Format soll es verwenden?

Verwenden Sie plt.plot_date anstelle von plt.plot.

Oder nach Plotten, können Sie

ax = plt.gca() 
ax.xaxis_date() # treat the x-axis as dates 
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) # specify the format you want 
+0

Vielen Dank das hat funktioniert, aber das Datum zeigt eine Stunde in der Vergangenheit. Wo es um 03:00 Uhr angezeigt werden soll, wird 02:00 angezeigt. Dies ist für alle Daten – Nosh

+0

@Nosh: klingt wie die Zeiten sind in UTC, und Sie erwarten britische Sommerzeit oder umgekehrt. Passen Sie einfach die Zeiten an, z. in Ihrer Schleife 'für jedes in der Vorhersage_Liste' 'time.append (jedes [0] + Zeitdelta (Stunden = 1))'. – Kundor

Verwandte Themen