Hallo Zusammen
Ich arbeite zur Zeit an einem Projekt mit einem Pulssensor den ich am Raspberry Pi auslesen will.
Nin bin ich so weit und mein Programm erstellt mir nach 20 Messungen ein Diagramm welches auch gespeichert wird.
Nun meine Frage, wo muss ich den Befehl plot.show() einfügen damit das Diagramm auch sogleich geöffnet wird ?
#!/usr/bin/python
from pulsesensor import Pulsesensor
import time
import os
import pylab as plt
import sys
p = Pulsesensor ()
p.startAsyncBPM ()
Liste=[]
try:
for x in range(1,20):
bpm = p.BPM
if bpm > 0:
print("BPM: %d" % bpm)
Liste.append(bpm)
else:
print("No Heartbeat found")
time.sleep(1)
print ("Diagramm erstellen")
plt.ioff()
fig = plt.figure()
plt.plot(Liste)
plt.savefig('test0.png')
plt.close(fig)
plt.show()
print ("Fertig")
p.stopAsyncBPM()
except:
p.stopAsyncBPM()
sys.exit()
Matplotlib Diagramm direkt anzeigen
Zu Deinem Code schreibe ich jetzt nichts, außer dass der sich besser lesen würde, wenn Du den in Code-Tags gesetzt hättest ("Code auswählen"). Doch ob man da einiges besser hätte schreiben können, da bin ich mir nicht so sicher.
Wenn das Ergebnis mit 'test0.png' richtig gespeichert wird, warum setzt Du die Ausgabe nicht gleich darunter, statt zuvor mit close zu schließen? Also, wenn close erforderlich, dann doch eher in dieser Reihenfolge, würde ich mir denken.
Wenn das Ergebnis mit 'test0.png' richtig gespeichert wird, warum setzt Du die Ausgabe nicht gleich darunter, statt zuvor mit close zu schließen? Also, wenn close erforderlich, dann doch eher in dieser Reihenfolge, würde ich mir denken.
Code: Alles auswählen
plt.show()
plt.close(fig)
Hallo Melewo
Danke für deine Antwort und entschuldige das ich den Code nicht richtig eingefügt habe. Bin neu hier.
Ich habe meinen Code noch etwas umgeschrieben
Nun hab ich aber das nette Problem, dass es mir das png einwandfrei speichert die Funktion show nicht funktioniert. Dass heisst es geht leider kein Fenster auf, welches das Diagramm anzeigt.
Vielleicht hatte jemand das Problem schon und kann mir Helfen ? ich arbeite auf einem Mac.
Danke
Danke für deine Antwort und entschuldige das ich den Code nicht richtig eingefügt habe. Bin neu hier.
Ich habe meinen Code noch etwas umgeschrieben
Code: Alles auswählen
#!/usr/bin/python
from pulsesensor import Pulsesensor
import time
import os
import matplotlib
import matplotlib.pyplot as plt
import sys
p = Pulsesensor ()
p.startAsyncBPM ()
Liste=[]
try:
for x in range(1,20):
bpm = p.BPM
if bpm > 0:
print("BPM: %d" % bpm)
Liste.append(bpm)
else:
print("No Heartbeat found")
time.sleep(1)
print ("Diagramm erstellen")
p.stopAsyncBPM()
plt.ioff()
fig = plt.figure()
plt.plot(Liste)
plt.xlabel("Messung")
plt.ylabel("Schlaege/Minute")
plt.title("Auswertung Pulssensor")
plt.grid(True)
plt.savefig('Diagramm.png')
plt.show()
print ("Fertig")
p.stopAsyncBPM()
except:
p.stopAsyncBPM()
sys.exit()
Vielleicht hatte jemand das Problem schon und kann mir Helfen ? ich arbeite auf einem Mac.
Danke

Wenn ich mir example.py betrachte, fällt mir als erstes auf, dass Du "p.stopAsyncBPM()" zweimal innerhalb von try benutzt, was mindestens einmal zu viel sein dürfte.
https://github.com/tutRPi/Raspberry-Pi- ... example.py
Dann trenne beides, notiere nur den Pulsesensor mit allem was dazugehört in eine Funktion, welche mit return die Liste liefert und was zum Plot gehört in eine andere Funktion, welche die Liste übernimmt und den Plot aufbereitet. Dann hast Du beides getrennt und kannst leichter nach einem Fehler suchen. Wo hast Du das mit dem "sys" jetzt her, braucht man das?
Die beiden scheinen zumindest über zu sein, sehe keine Verwendung.
https://github.com/tutRPi/Raspberry-Pi- ... example.py
Dann trenne beides, notiere nur den Pulsesensor mit allem was dazugehört in eine Funktion, welche mit return die Liste liefert und was zum Plot gehört in eine andere Funktion, welche die Liste übernimmt und den Plot aufbereitet. Dann hast Du beides getrennt und kannst leichter nach einem Fehler suchen. Wo hast Du das mit dem "sys" jetzt her, braucht man das?
Die beiden scheinen zumindest über zu sein, sehe keine Verwendung.
Code: Alles auswählen
import os
import matplotlib
@Sindrin: das try-except so wie es gerade dasteht ist falsch. Was Du eigentlich benutzen willst, ist try-finally und nur im finally-Block steht `p.stopAsyncBPM()`. sys.exit in der letzten Zeile ist sinnfrei; weg damit.
Du verwendest offensichtlich Python2, da gehören entweder keine Klammern um `print` oder ein __future__-Import.
Der Code ist zu lang. Du solltest zwei Funktionen schreiben, eine zum Lesen des Pilsesensors und eine zum Ausgeben des Diagramms.
Du verwendest offensichtlich Python2, da gehören entweder keine Klammern um `print` oder ein __future__-Import.
Der Code ist zu lang. Du solltest zwei Funktionen schreiben, eine zum Lesen des Pilsesensors und eine zum Ausgeben des Diagramms.
Code: Alles auswählen
#!/usr/bin/python
from __future__ import print_function
import time
import os
import matplotlib
import matplotlib.pyplot as plt
from pulsesensor import Pulsesensor
def read_pulse_sensor(times=19):
result = []
p = Pulsesensor()
p.startAsyncBPM()
try:
for _ in range(times):
bpm = p.BPM
if bpm > 0:
print("BPM: %d" % bpm)
result.append(bpm)
else:
print("No Heartbeat found")
time.sleep(1)
finally:
p.stopAsyncBPM()
return result
def display_and_save_diagram(measurement, filename):
print ("Diagramm erstellen")
plt.plot(measurement)
plt.xlabel("Messung")
plt.ylabel("Schlaege/Minute")
plt.title("Auswertung Pulssensor")
plt.grid(True)
plt.savefig(filename)
plt.show()
print ("Fertig")
def main():
measurement = read_pulse_sensor()
display_and_save_diagram(measurement, 'Diagramm.png')
if __name__ == '__main__':
main()
Und das 'Diagramm.png' wird sauber gespeichert?
Dann muss ich passen, denn wenn ich nur die untere Funktion nehme und für einen Test eine Liste einfüge, dann funktioniert die unter Windows einwandfrei bei mir. Doch mit plt.show() sollte wohl Raspberry Pi auch keine Probleme haben, jedenfalls habe ich dazu nichts gefunden, außer einem Hinweis auf Versionsgerangel.
Dann muss ich passen, denn wenn ich nur die untere Funktion nehme und für einen Test eine Liste einfüge, dann funktioniert die unter Windows einwandfrei bei mir. Doch mit plt.show() sollte wohl Raspberry Pi auch keine Probleme haben, jedenfalls habe ich dazu nichts gefunden, außer einem Hinweis auf Versionsgerangel.
Code: Alles auswählen
import matplotlib.pyplot as plt
def display_and_save_diagram(measurement, filename):
print ("Diagramm erstellen")
plt.plot(measurement)
plt.xlabel("Messung")
plt.ylabel("Schlaege/Minute")
plt.title("Auswertung Pulssensor")
plt.grid(True)
plt.savefig(filename)
plt.show()
print ("Fertig")
def main():
measurement = [50, 51, 52, 53, 54, 58, 60, 62, 64, 60, 58]
display_and_save_diagram(measurement, 'Diagramm.png')
if __name__ == '__main__':
main()
Ja das png wird sauber mit Benennung gespeichert und ich kann es via Filezilla problemlos öffnen.
Ich denke mir bleibt nichts andere möglich als eventuell mal meinen Raspberry neu aufzusetzen, vielleicht löst das den Bug.
Ich hab noch in einigen anderen Foren gelesen, das man den Backend für Mac ändern muss. Aber das hat auch nicht funktioniert.
Ich denke mir bleibt nichts andere möglich als eventuell mal meinen Raspberry neu aufzusetzen, vielleicht löst das den Bug.
Ich hab noch in einigen anderen Foren gelesen, das man den Backend für Mac ändern muss. Aber das hat auch nicht funktioniert.