Seite 1 von 1
Matplotlib erster Versuch
Verfasst: Samstag 18. November 2017, 18:10
von DMS33GER
Hallo,
ich beschäftige mich jetzt schon ein paar Monate mit Python. Nun komme ich aber einfach nicht weiter und bräuchte mal Hilfe.
Ziel ist es Verschiedene Temperaturmessungen in einem Diagramm darzustellen. Die Werte hole ich aus verschiedenen DB oder txt Dateien. Dabei sehen die X-Werte so aus "Jahr-Monat-Tag Uhrzeit" und bei Y1..Y3 Temperaturen wie "18,6".
Beim Ploten mit Matplotlib kommt folgende Ausgabe, bei der die Y-Skala in 3 Teile gespalten wird. Die Temperaturen sollten sich doch aber übereinander legen und nur eine Y-Skala haben.
Plot:
https://drive.google.com/file/d/1mcJzjN ... Q-tbT/view
Code: Alles auswählen
...
plt.plot(x, y1, label='T1')
plt.plot(x, y2, label='T2')
plt.plot(x, y3, label='T3')
plt.grid(True)
plt.xticks(rotation=45)
plt.ylabel('Temp. in °C')
plt.title(pyNAME)
plt.legend()
plt.show()
Re: Matplotlib erster Versuch
Verfasst: Samstag 18. November 2017, 18:43
von narpfel
Moin,
im Prinzip funktioniert das so, wie du das gezeigt hast. Der Fehler muss also in dem Teil liegen, den du nicht zeigst. Versuch’ am besten mal, ein lauffähiges Minimalbeispiel zu finden, das den Fehler zeigt. Sprich: So lange Teile des Programms entfernen, bis der Fehler nicht mehr auftritt.
Was für einen Typ haben die Werte, die du da plottest?
Re: Matplotlib erster Versuch
Verfasst: Samstag 18. November 2017, 19:59
von DMS33GER
hm..
Code: Alles auswählen
try:
y2 = []
result2 = c.execute("SELECT Datensatz, Temp FROM covelin ORDER BY Datensatz ASC LIMIT 10")
for row in result2:
r2 = str(float(row[1]))
r2 = str(r2.replace(".", ","))
y2 += [r2]
except:
print("[FAIL] SQL 2")
sys.exit(0)
Ohne string geht es aber wie zeige ich auf dem Plot die Werte mit Komma?
Danke, narpfel. Irgendwie werd ich mich mal zu Komma und Punkt belesen müssen ...
Re: Matplotlib erster Versuch
Verfasst: Samstag 18. November 2017, 21:02
von narpfel
Du könntest einen
Tick Formatter benutzen.
Zu deinem Code: Ein `except` ohne konkrete Ausnahme, die abgefangen werden soll, ist quasi nie eine gute Idee, weil man damit
alle Fehler verschluckt. Außerdem ist ein`print("Fehler!"); sys.exit()` keine sinnvolle Fehlerbehandlung, weil das Programm
ohne die Fehlerbehandlung auch abbrechen würde, dabei aber noch einen zur Fehlersuche verwendbaren Traceback ausgegeben würde.
Warum konvertierst du den `Temp`-Wert aus der Datenbank in einen `float`? Die Werte sollten direkt als Zahlen in der Datenbank gespeichert werden.
`y2 += [r2]` ist nur eine ineffiziente Möglichkeit, `y2.append(r2)` zu schreiben.
Den Code könnte man so ein wenig pythonischer formulieren (ungetestet):
Code: Alles auswählen
result = c.execute("SELECT Datensatz, Temp FROM covelin ORDER BY Datensatz ASC LIMIT 10")
y2 = [temperature for (_, temperature) in result]
# oder
from operator import itemgetter
y2 = list(map(itemgetter(1), result))
Re: Matplotlib erster Versuch
Verfasst: Samstag 18. November 2017, 22:02
von DMS33GER
Bisher hab ich hier und da Mal was gelesen und kopiert. Die Datenerfassung is schon etwas älter und nicht von mir. Bei vielen liefen Scripte wohl nebenbei in einem terminal und es wurden Messwerte gleich mit gezeigt und daher das `print("Fehler!")` wenn in einer Schleife bei einem Block kein Wert ermittelt wurde (Gerät offline usw.).
Ich merke schon vor mir waren wohl auch nur Amateure beschäftigt.
Danke für deine Hilfe, ich werd deine Anmerkungen mit aufnehmen und schön weiter basteln und lernen.