2016-11-22 3 views
-2

Ich habe versucht, ein Streudiagramm zu erstellen, und meine X-Achse muss jeden einzelnen Tag in einem Jahr sein. ich zum ersten Mal in der Daten-Datei lesen und die Datumsspalte erhalten, die wie mit ganzen Zahlen gefüllt sind, 19800801. So wandle ich diese integer-datetime durch Schreiben:Wie extrahiert man nur den Monat und den Tag aus einem Datetime-Objekt?

datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d') 

Dann nur den Monat und den Tag extrahieren Ich möchte aus das Datetime-Objekt durch Schreiben:

s = datetimes_0.strftime("%m%d") 

ich erkannte, dass sie Wert von strftime Rückkehr ist nicht ein Datetime-Objekt mehr so ​​habe ich versucht, es wieder zu Datetime-Objekt Umwandlung von

tun

Aber anstatt mir nur den Monat und den Tag zu geben, gibt es mir das ganze Jahr, Monat und Tag zurück. Meine Frage ist, wie extrahiere ich ein Datetime-Objekt nur aus dem Monat und Tag (beide) aus einer bestimmten Ganzzahl wie 19800801?

+0

Sie Datetime-Objekt aus Zeichenfolge wollen, oder wollen Zeichenfolge konvertieren in Datetime? –

+0

Ich möchte zuerst die Ganzzahl 19800801 in datetime-Objekt umwandeln, aber ich brauche nur den Monat und Tag, 0801. Also im Grunde möchte ich ein Datetime-Objekt, das nur den Monat und den Tag enthält, etwa 0801, aber hier ist 0801 keine ganze Zahl , aber ein Datetime-Objekt. Ist das sinnvoll? –

Antwort

3

Dies wird für eine ganze Zahl nehmen (vorausgesetzt, es ist eine gültige Zeit) und in ein Python Datetime-Objekt konvertieren:

>>> import datetime 
>>> date = datetime.datetime.fromtimestamp(19800801) 
>>> print date.month 
8 
>>> print date.day 
17 

oder mit Strftime (Returns String und keine Datumzeit-Objekt):

>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d') 
'0817' 

den Monat und den Tag als eine ganze Zahl ausgibt:

>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d')) 
817 
+0

Aber durch die Verwendung von strftime, gibt es mir eine Zeichenfolge anstelle eines Datetime-Objekts, wie konvertiere ich es in Datetime-Objekt? Nur der Monat und der Tag. –

+0

Warum können Sie das Datetime-Objekt aus dem ersten Beispiel nicht verwenden? – GracefulRestart

+0

Weil ich sowohl den Monat als auch den Tag in einem Objekt brauche. Ich habe versucht, ein Streudiagramm zu zeichnen, und jedes einzelne Datum (ohne Jahr) wird meine Achse bilden (die 365 Tage sind also meine X-Achse), meine Y-Achse ist die Temperatur an diesem Datum. Also zurück zu deiner Frage, ich brauche sowohl den Monat als auch den Tag als ein Objekt, so dass ich es in mein Argument für plt.scatter() setzen kann –

3

Wenn Sie versuchen, Um zeitbasierte Daten in Matplotlib zu plotten, besteht der übliche Ansatz darin, zuerst Ihre Daten in datatime Objekte umzuwandeln und dann matplotlib zu erhalten, um diese Werte in eine eigene interne Repräsentation zu konvertieren, die die date2num() Funktion verwendet. Als nächstes können Sie matplotlib sagen, wie Sie alle Ticks auf der X-Achse formatieren, indem Sie einen Formatierer verwenden, in diesem Fall einen DateFormatter(). So könnten Sie beispielsweise wählen, dass für jeden Tick ein Monat und ein Tag angezeigt werden.

In diesem Beispiel zeige ich den Monat, mit dem Tag auf der Linie unten:

from matplotlib import pyplot, dates 
from datetime import datetime 

data = [("19800801", 16), ("19800810", 10), ("19800901", 15), ("19800905", 14)] 

xaxis = [datetime.strptime(d, '%Y%m%d') for d, v in data] 
yaxis = [v for d, v in data] 

ax = pyplot.gca() 
xaxis = dates.date2num(xaxis) # Convert to maplotlib format 
hfmt = dates.DateFormatter('%m\n%d') 
ax.xaxis.set_major_formatter(hfmt) 

pyplot.xlabel('Date') 
pyplot.ylabel('Value') 
pyplot.plot(xaxis, yaxis) 
pyplot.tight_layout() 

pyplot.show() 

Diese Anzeige würde wie folgt:

month day xaxis matplotlib demo

Sie könnten dann diese verlängern zu verwenden a , die Matplotlib anweist, die Xticks an den genauen Tagesstellen wie folgt zu platzieren:

ax.xaxis.set_major_locator(dates.DayLocator()) 

Geben Sie:

plot using day locator

+0

Hi: das hilft sehr! Ich habe eine andere Frage. Da ich 13 Jahre Daten grafisch darstellen muss, möchte ich, dass die X-Achse nur ein Jahr von Daten (366 Tage) ist, damit der Wert für jedes Datum am selben Datum ohne das Jahr angezeigt werden kann. Zum Beispiel kann die Temperatur am 4. Juli (85F) auf der gleichen y-Achse angezeigt werden, egal in welchem ​​Jahr sie ist. Wie funktioniert das? –

+0

Wie Sie sagen, wahrscheinlich am besten als eine andere Frage. Sie müssten Ihre Daten in Jahresbrocken (ohne das Jahr) aufteilen und dann jedes getrennt (vielleicht mit verschiedenen Farben) plotten. –

+0

Wenn Sie mit der Lösung zufrieden sind, vergessen Sie nicht, auf das graue Häkchen daneben zu klicken, um es als akzeptierte Antwort zu markieren und Ihr Scholar-Abzeichen zu erhalten. –

Verwandte Themen