Zeichnen von Daten auf der x-Achse mit Matplotlib von Python

Lesezeit: 4 Minuten

Zeichnen von Daten auf der x Achse mit Matplotlib von Python
irl_irl

Ich versuche, Informationen gegen Daten zu plotten. Ich habe eine Datumsliste im Format “01.02.1991”.

Ich habe sie folgendermaßen konvertiert:

x = parser.parse(date).strftime('%Y%m%d'))

was gibt 19910102

Dann habe ich versucht, num2date zu verwenden

import matplotlib.dates as dates
new_x = dates.num2date(x)

Plotten:

plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)

Aber ich bekomme einen Fehler. Da steht “ValueError: year is out of range”. Irgendwelche Lösungen?

  • Ah, ich habe ein schlechtes Beispieldatum gegeben. Ich habe den 31. Dezember 2012 nicht in meiner Datumsliste. Ich habe es auf den 02. Januar 1991 geändert.

    – irl_irl

    9. März 12 um 1:49 Uhr

  • help(num2date): “x ist ein Gleitkommawert, der eins plus die Anzahl der Tage seit dem 01.01.0001 ergibt”, also entspricht x=19910102 nicht dem 02.01.1991

    – Kys Tao

    9. März 12 um 1:51 Uhr

  • Was ist Parser in dieser Frage?

    – Johannes Schnee

    4. Januar 20 um 3:05 Uhr

Zeichnen von Daten auf der x Achse mit Matplotlib von Python
mechanisches_fleisch

Einfacher geht das mit plot() anstatt plot_date().

Konvertieren Sie zuerst Ihre Zeichenfolgen in Instanzen von Python datetime.date:

import datetime as dt

dates = ['01/02/1991','01/03/1991','01/04/1991']
x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in dates]
y = range(len(x)) # many thanks to Kyss Tao for setting me straight here

Dann zeichne:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.plot(x,y)
plt.gcf().autofmt_xdate()

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

  • @bernie Danke, es hat mir wirklich geholfen. In meinem Problem habe ich jedoch zu viele Tage, sodass die gesamte Handlung verstopft wird. Wie können Sie mit Ihrer Methode jedes fünfte Datum oder jedes zehnte Datum auf der x-Achse anzeigen?

    – Benutzer1506145

    3. Juli 13 um 8:26 Uhr

  • @erik Ich weiß, das ist ein bisschen spät, aber ich habe die beiden set_major-Zeilen entfernt und das hat es für mich geklärt. Einige Funktionen verloren, aber immer noch eine Verbesserung.

    – Der Boro

    18. März 16 um 9:19 Uhr

  • Leider zeigt es mir nicht 3 Daten, sondern 6 andere Daten (allerdings in diesem Intervall). Mit matplotlib-1.5.1

    – Grooscha

    22. Mai ’16 um 9:16 Uhr

1644073627 207 Zeichnen von Daten auf der x Achse mit Matplotlib von Python
Jacek Szałęga

Ich habe einen zu niedrigen Ruf, um einen Kommentar zur Antwort von @bernie hinzuzufügen, mit einer Antwort auf @user1506145. Ich bin auf das gleiche Problem gestoßen.

1

Die Antwort darauf ist ein Intervallparameter, der die Dinge in Ordnung bringt

2

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
import datetime as dt

np.random.seed(1)

N = 100
y = np.random.rand(N)

now = dt.datetime.now()
then = now + dt.timedelta(days=100)
days = mdates.drange(now,then,dt.timedelta(days=1))

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=5))
plt.plot(days,y)
plt.gcf().autofmt_xdate()
plt.show()

  • Bitte beachten Sie, dass, wenn Sie das erste Datum einer Reihe oder eines Indexes und das letzte Datum nehmen, das letzte Datum abgeschnitten wird, da es sich um einen Bereich handelt, und Sie mit Ihrem Code auf Fehler stoßen. Angenommen, Sie haben eine Date Spalte in Ihrem Index, dann können Sie Folgendes tun: days = mdates.drange(d1.index.min(),d1.index.max() + dt.timedelta(days=1),dt.timedelta(days=1)). Im Wesentlichen habe ich dem Datum des Obergrenzenwerts des Bereichs 1 Tag hinzugefügt.

    – David Erickson

    5. Dezember 20 um 4:16 Uhr


  • Welche Änderungen sollte ich im Code von Jacek Szałęga vornehmen, um keine zufälligen Daten auf der x-Achse zuzuweisen, sondern auf der x-Achse Daten zu platzieren, die aus einer Excel-Datei gesammelt / abgetastet wurden?

    – nur_lernen

    10. September 21 um 7:16 Uhr


Wie @KyssTao gesagt hat, help(dates.num2date) sagt, dass die x muss ein Gleitkommawert sein, der die Anzahl der Tage seit 0001-01-01 plus eins angibt. Somit, 19910102 ist nicht der 2. Januar 1991, denn wenn Sie 19910101 Tage vom 01.01.0001 zählen, erhalten Sie etwas im Jahr 54513 oder ähnlich (geteilt durch 365,25, Anzahl der Tage in einem Jahr).

Benutzen datestr2num stattdessen (vgl help(dates.datestr2num)):

new_x = dates.datestr2num(date) # where date is '01/02/1991'

  • Es wäre nett, wenn du das hinzufügen könntest import -Anweisung, um Python-Neulingen wie mir zu helfen.

    – kkuilla

    6. März 20 um 10:13 Uhr

  • @kkuilla Wenn das noch relevant ist, vermute ich, dass er es so hat import matplotlib.dates as dates

    – Ira II

    25. Februar 21 um 20:11 Uhr


.

784600cookie-checkZeichnen von Daten auf der x-Achse mit Matplotlib von Python

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy