Ausgabe
Ich habe also diesen Datensatz regionaler Temperaturen.
Es enthält tägliche Daten aus vielen Jahren (z. B. 1998-7-12, 2005-4-12). Wenn ich es also mit x als Zeit grafisch darstelle, überlappen sich die x-Etiketten, und wenn ich sie drehe, überlappen sie sich immer noch.
mein code sieht so aus:
import matplotlib.pyplot as plt
import pandas as pd
sheet = pd.read_csv('sheet.csv')
x = sheet['T']
y = sheet['F']
yerror = sheet['E']
plt.title('BHF')
plt.errorbar(x,y,yerr=yerror, fmt='o', elinewidth=1)
plt.grid(linestyle=':')
plt.show()
Es sieht so aus:
https://i.stack.imgur.com/Y1mUZ.png
Ich bin neu in Matplotlibs und Pandas, also könnte mir jemand sagen, wie ich es codieren soll, damit die x-Ticks nur erscheinen, zum Beispiel alle 5 Jahre?
Beispiel, wie es aussehen soll: https://i.stack.imgur.com/Fp4Oi.png
Lösung
Sie müssen zuerst sicherstellen, dass die Daten im datetime-Format vorliegen (überprüfen Sie dies mit dem sheet.info()
Befehl – Spalte T sollte datetime anzeigen). Wenn nicht, verwenden pd.to_datetime()
Sie , um es auf das Datum zu ändern. Nachdem Sie das Diagramm gezeichnet haben, verwenden Sie set_major_locator()
, um die Locators auf 5-Jahres-Ticks set_major_formatter()
einzustellen und das Format einzustellen, in dem Sie das Datum und die Uhrzeit anzeigen möchten. Ein einfaches Beispiel ist unten, um dasselbe zu zeigen …
sheet = pd.DataFrame({'T': ['1995-1-21', '1998-7-12', '2002-3-15', '2005-4-12'], 'F': [21, 23,43,12],'E': [5, 1,2,3]}) ##Dummy cata
sheet['T'] = pd.to_datetime(sheet['T'], format='%Y-%m-%d') ##Convert column to datetime
x = sheet['T']
y = sheet['F']
yerror = sheet['E']
plt.title('BHF')
plt.errorbar(x,y,yerr=yerror, fmt='o', elinewidth=1)
plt.grid(linestyle=':')
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_locator(mdates.YearLocator(base=5)) ##Ticks should be 5 years apart
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) ##Format of display of date
plt.show()
Beantwortet von – Redox
Antwort geprüft von – Katrina (FixError Volunteer)