Ich versuche, meine erste Grafik mit Matplotlib zu plotten, ich bin neu zu sqlite3 und Matplotlib und normalerweise rrdtool verwenden. Ich habe kein Problem, die Datenbank aufzufüllen oder die Datenbank abzurufen (Dumping), aber ich kann mich nicht um ein Diagramm kümmern. Kannst du mich auf den richtigen Weg bringen, um eine Reihe von Temperaturen und Luftfeuchtigkeit für meine Garage auf einer Timeline grafisch darzustellen?Python sqlite3 und matplotlib plot ersten Graph
Das Format der Tabelle ist:
create table external (temperature float, humidity float, feelslike float, timenow text);
Ein Auszug aus der Datenbank mit .dump wie folgt aussieht:
INSERT INTO "external" VALUES(17.0,68.0,11.6,'2017-07-24 12:24:02.578014');
INSERT INTO "external" VALUES(17.7,68.0,12.3,'2017-07-24 12:34:02.590939');
INSERT INTO "external" VALUES(17.7,68.0,12.3,'2017-07-24 12:44:02.585097');
INSERT INTO "external" VALUES(17.7,68.0,12.3,'2017-07-24 12:54:02.594123');
INSERT INTO "external" VALUES(18.3,63.0,12.8,'2017-07-24 13:04:02.586191');
INSERT INTO "external" VALUES(18.3,63.0,12.8,'2017-07-24 13:14:02.566619');
Meine Funktion
import sqlite3
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from dateutil import parser
from matplotlib import style
def graph_data():
# Connect to database
now = datetime.now()
sqlite_file = '/home/pi/scripts/database/climate.db'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
style.use('fivethirtyeight')
c.execute('SELECT temperature, humidity, feelslike, timenow FROM external')
data = c.fetchall()
temperature = []
humidity = []
feelslike = []
timenow = []
for row in data:
timenow.append(parser.parse(row[0]))
values.append(row[1])
plt.plot_date(temperature, humidity, feelslike,'-')
plt.savefig('/home/pi/scripts/database/foo.png')
c.close()
conn.close()
My Code erzeugt Folgefehler:
Traceback (most recent call last):
File "test.py", line 364, in <module>
graph_data()
File "test.py", line 323, in graph_data
timenow.append(parser.parse(row[0]))
File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 1168, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 556, in parse
res, skipped_tokens = self._parse(timestr, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 675, in _parse
l = _timelex.split(timestr) # Splits the timestr into tokens
File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 192, in split
return list(cls(s))
File "/usr/local/lib/python2.7/dist-packages/dateutil/parser.py", line 61, in __init__
'{itype}'.format(itype=instream.__class__.__name__))
TypeError: Parser must be a string or character stream, not float
Ich vermute es ist die Art, wie es die Daten analysiert?
, das funktioniert! Wie gehe ich vor, diese Daten mit mehreren Daten gegen eine Zeitlinie zu zeichnen? Dies ist eindeutig fehlgeschlagen: 'plt.plot_date (Temperatur, Feuchtigkeit, fühlt sich an, '-')' – northwarks
Vielen Dank für eine Erinnerung, ich habe diesen Satz übersehen. Ich habe die Antwort bearbeitet und ein Beispiel für das Plotten hinzugefügt. –
Noch einmal, das funktioniert wirklich gut und genau das, was ich suchte, um mir eine funktionierende Grafik zu geben, kann ich jetzt von lernen, aufbauen und zwicken. – northwarks