Guten Tag,
Ich habe kürzlich ein Projekt mit pyplot/matplotlib begonnen und habe das Problem dass der Plot nicht linear ist wie gewünscht. Die werte kommen Seriell vom Arduino und werden der Liste hinzugefügt nach einer anzahl von gesammelten werten wird die Liste im Plot angezeigt aber auf der y Achse sind die werten nicht von unten klein zu groß sondern "zufällig" verteilt. Ich würde mich sehr über Lösungsvorschläge wie man die y Achsen werte von klein zu groß sortiert freuen.
https://ibb.co/itSCzz
Sry für komische Fragestellung, schreibe selten in Foren
Vielen Dank für Antworten
Matplotlib/pyplot Hilfe
Ich verstehe die Frage nicht. Wenn dein Code so funktioniert wie du ihn beschreibst (aber nicht zeigst), dann ist x eine zeitachse. Und wenn dann Werte vom arduino einlaufen, die kleiner sind als ein Wert davor, dann ist das halt so. Was erwartest du, das da andres sein soll?
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__: Ich denke es geht um die (schlecht zu lesende) Beschriftung der Y-Achse. Die Werte dort scheinen ungeordnet zu sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 3
- Registriert: Mittwoch 19. September 2018, 17:27
Tut mir leid, habe vergessen den Code hinzuzufügen. Mein Ziel ist die "Zahlenbeschriftung" der y Achse zu sortieren von unten niedrigster Wert zu oben höherster Wert.
https://imgur.com/a/Zb56pR7
Sry nochmal wegen der Fragestellung
https://imgur.com/a/Zb56pR7
Sry nochmal wegen der Fragestellung
Code: Alles auswählen
import matplotlib.pyplot as plt
import serial
import numpy as np
import time
xar=[]
ser = serial.Serial('COM8', baudrate=115200)
count=0
predata=10000
rec=False
plt.style.use('seaborn-whitegrid')
while True:
data=int(ser.readline().decode('ascii'))
if(data>predata+10):
if(rec==False):
for x in range(100):
data=ser.readline().decode('ascii')
print(data)
xar.append(data)
rec=False
plt.plot(xar)
plt.show()
break
predata=data
if(rec==True):
plt.plot(xar)
plt.show()
›if‹ ist keine Funktion, die Klammern daher unnötig. Da ›rec‹ nie True wird, kann man es auch gleich weglassen. Der innerste if-Block ist zu lang, als dass er sinnvoll in der while-Schleife wäre, da am Schluß sowieso immer die Schleife per break verlassen wird. ›xar‹ sollte dann initialisiert werden, wenn es auch benutzt wird und nicht 13 Zeilen davor. numpy und time wird importiert aber nicht verwendet. ›count‹ wird definiert aber nicht verwendet.
Für Fragen, wie man in Matplotlib etwas macht, schaut man am besten in der Gallerie nach einem passenden Beispiel: https://matplotlib.org/gallery
z.B: https://matplotlib.org/examples/ticks_a ... ators.html
Code: Alles auswählen
import matplotlib.pyplot as plt
import serial
plt.style.use('seaborn-whitegrid')
def read_int(ser):
return int(ser.readline().decode('ascii'))
ser = serial.Serial('COM8', baudrate=115200)
data = predata = read_int(ser)
while data < predata + 10:
predata = data
data = read_int(ser)
xar = []
for x in range(100):
data = read_int(ser)
print(data)
xar.append(data)
plt.plot(xar)
plt.show()
z.B: https://matplotlib.org/examples/ticks_a ... ators.html
-
- User
- Beiträge: 3
- Registriert: Mittwoch 19. September 2018, 17:27
Vielen Dank für die schnelle Antwort und Problemlösung die Bibliotheken usw. waren noch Überreste von verschiedenen Lösungswegen. Leider hatte ich noch nicht sehr viel mit Python zu tuen weil ich erst 14 bin und wegen Schule und so nicht so viel Zeit habe.