Nach 6 Stunden erfolglosen scribten habe ich mich dazu entschlossen einen Account für dieses Forum zu erstellen und um Hilfe zu bitten.
Als Anfänger habe ich mich das erste mal an grafische Ausgaben mit Hilfe von Python gewagt.
Nun habe ich leider ein kleines, mittelgroßes Problem:
Zuerst lese ich Werte von einem USB Gerät aus, dass klappt schon einmal bis hier hin.
Danach soll sich mit Hilfe von Matplotlib ein Balkendiagramm öffnen in dem die Werte angezeigt werden.
Balkendiagramm öffnet sich und die Werte werden angezeigt, aber das Programm läuft nach plot.show() nicht weiter.
eigentlich sollte die Schleife nach einer Wartezeit von vorne Anfangen, also Werte auslesen und neues Diagramm zeichnen, ggf. die Werte im Balkendiagramm nur aktualisieren? Vielleicht kann mir jemand helfen. LG elminer
Blockierung plot.show()
Matplotlib ist nicht so richtig gedacht für solche Zwecke. Auch wenn man es dahin kriegen kann, ist das ein bisschen fummelig und meines Wissens nach auch einfach ein neu zeichnen der Plots, kein echtes update.
Es gibt neuere Frameworks die solche Anwendungen berücksichtigen. Schau dir mal plotly oder bokeh an.
Allgemein ist eine solche Programmierung aber nicht ganz einfach. Man muss sich üblicherweise mit einer Ereignisschleife auseinandersetzen, und seinen Code entweder in Häppchen aufteilen, oder nebenläufig laufen lassen & dann geeignet in die Hauptschleife schieben. Am besten zeigst du mal was du machst - dann kann man das besser beurteilen.
Es gibt neuere Frameworks die solche Anwendungen berücksichtigen. Schau dir mal plotly oder bokeh an.
Allgemein ist eine solche Programmierung aber nicht ganz einfach. Man muss sich üblicherweise mit einer Ereignisschleife auseinandersetzen, und seinen Code entweder in Häppchen aufteilen, oder nebenläufig laufen lassen & dann geeignet in die Hauptschleife schieben. Am besten zeigst du mal was du machst - dann kann man das besser beurteilen.
Hier ist noch mein Code, erstmal ohne Schleife.
Das Problem: print-Befehl wird nicht ausgeführt da der Code bei plot.show() hängen bleibt.
Danke für den Tipp werde mich gleich mal informieren.
Nutze zur Zeit noch feste Werte zum zeichnen des Balkendiagramms, sollen später durch Variablen ersetzt werden.
LG elminer
Code:
Das Problem: print-Befehl wird nicht ausgeführt da der Code bei plot.show() hängen bleibt.
Danke für den Tipp werde mich gleich mal informieren.
Nutze zur Zeit noch feste Werte zum zeichnen des Balkendiagramms, sollen später durch Variablen ersetzt werden.
LG elminer
Code:
Code: Alles auswählen
print "It works"
import time
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import sys
import multiprocessing
import matplotlib.pyplot as plt
import matplotlib as mpl
from dronekit import connect
from matplotlib.pyplot import plot, draw, show
vehicle = connect ('/dev/ttyACM0', wait_ready=True)
x = 0
answer = raw_input("Enter something")
def make_plot():
objects = ('Pitch', 'Jaw', 'Roll')
y_pos = np.arange(len(objects))
performance = [0.8,0.053,-0.14]
plt.bar(y_pos, performance, align='center', alpha=0.5)
plt.xticks(y_pos, objects)
plt.ylabel('Values')
plt.title('Flightdata')
plt.show()
plt.pause(0.01)
print " Attitude: %s" % vehicle.attitude
time.sleep(5)
make_plot()
Zuletzt geändert von Anonymous am Sonntag 9. Juli 2017, 12:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Hier ist ein Beispiel, bei dem illustriert wird wie der Zugriff auf Daten in einem Thread erfolgt.
http://bokeh.pydata.org/en/latest/docs/ ... om-threads
http://bokeh.pydata.org/en/latest/docs/ ... om-threads
Hallo, habe vor einiger Zeit eine ähnliche Frage gestellt und habe feststellen müssen, dass "plot" nicht geeignet ist, um z.B. Fortschritte in einer Schleife zu zeigen. Plot bleibt nicht "hängen", es erwartet schlicht, dass das Fenster vom User geschlossen wird. Erst dann gehts wieder weiter.
Das Beispiel von __deets__ kann ich kaum nachvollziehen. Bin auch Anfänger...
Habe aber gute Beispiele in PyQt5 gefunden. Danach würde ich graphisches Widget erzeugen, in das die Werte nach und nach eingeschrieben werden. Allerdings ist auch PyQt5 nicht trivial und ich habe bisher noch keinen "Durchbruch" gehabt.
Vielleicht ist das aber trotzdem auch ein Weg für dich.
Viel Erfolg und Gruß
Das Beispiel von __deets__ kann ich kaum nachvollziehen. Bin auch Anfänger...
Habe aber gute Beispiele in PyQt5 gefunden. Danach würde ich graphisches Widget erzeugen, in das die Werte nach und nach eingeschrieben werden. Allerdings ist auch PyQt5 nicht trivial und ich habe bisher noch keinen "Durchbruch" gehabt.
Vielleicht ist das aber trotzdem auch ein Weg für dich.
Viel Erfolg und Gruß