Sie können die Datei mit np.recfromcsv laden. Wir konvertieren dann die Zeitspalte in Datetime-Objekte, für die wir eine convtime
-Funktion definieren. Dann verwenden wir diese Funktion, um Ihre CSV-Datei einzulesen.
import numpy as np
import matplotlib.pyplot as plt
convtime = lambda x: datetime.datetime.strptime(x, "%H:%M")
all_records = np.recfromcsv("myfilename.csv", names=["time", "user", "val"], converters={0:convtime}) # This says parse column 0 using the convtime function
Beachten Sie, dass, da wir nur die Zeit Teil datetime
gegeben haben, wird es das Datum übernehmen zum 1. Januar 1900. Sie können einen maßgeblichen Zeitpunkt, um es hinzuzufügen, wenn Sie sich interessieren.
Jetzt, um die Daten zu plotten. Dies bringt uns zu einem seltsamen Problem, wo Matplotlib nur ein Symbol für alle Punkte verwenden kann, die gezeichnet werden. Das bedeutet leider, dass wir eine for-Schleife verwenden müssen. Lassen Sie uns zunächst dict
s für das Symbol und Farbe für jeden Benutzer definieren:
symbols = {'user1':'*', 'user3':'o', 'empty':'x'}
colours = {'user1':'blue', 'user3':'red', 'empty':'orange'}
for rec in all_records:
plt.scatter(rec['time'], rec['val'], c=colours[rec['user']], marker=symbols[rec['user']])
Das fast tut es. Wir vermissen immer noch die Legende. Ein Nachteil dieser for-Schleife besteht darin, dass jede Zeile in Ihrer Datei einen Eintrag in der Legende enthält. Wir schlagen das, indem wir eine benutzerdefinierte Legende erstellen.
import matplotlib.lines as mlines
legend_list = []
for user in symbols.keys():
legend_list.append(mlines.Line2D([], [], color=colours[user], marker=symbols[user], ls='none', label=user))
plt.legend(loc='upper right', handles=legend_list)
plt.show()
Das macht es! Wenn Ihr Diagramm gequetscht aussieht, verwenden Sie plt.xlim()
, um die Grenzwerte nach Ihrem Geschmack anzupassen.