Ich versuche, Informationen gegen Daten zu zeichnen. Ich habe eine Liste von Daten im Format "01/02/1991".
Ich habe sie wie folgt 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. Es heißt "ValueError: Jahr liegt außerhalb des Bereichs". Irgendwelche Lösungen?
python
datetime
matplotlib
irl_irl
quelle
quelle
Antworten:
Wie @KyssTao gesagt hat,
help(dates.num2date)
sagt , dass diex
Anzahl der Tage seit 0001-01-01 plus eins geben ein Schwimmer sein muss. Daher19910102
ist nicht 2 / Jan / 1991, denn wenn Sie 19910101 Tage vom 0001-01-01 gezählt haben, würden Sie etwas im Jahr 54513 oder ähnliches erhalten (dividiert durch 365,25, Anzahl der Tage in einem Jahr).Verwenden Sie
datestr2num
stattdessen (siehehelp(dates.datestr2num)
):new_x = dates.datestr2num(date) # where date is '01/02/1991'
quelle
import
Aussage hinzufügen könnten , um Python-Neulingen wie mir zu helfen.Sie können dies einfacher tun, indem Sie
plot()
statt verwendenplot_date()
.Konvertieren Sie zunächst 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 Handlung:
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:
quelle
Ich habe einen zu geringen Ruf, um der Antwort von @bernie einen Kommentar hinzuzufügen, mit der Antwort auf @ user1506145. Ich bin auf dasselbe Problem gestoßen.
Die Antwort darauf ist ein Intervallparameter, der die Probleme behebt
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()
quelle