Ich möchte aktuelle Temperaturdaten (hier mit random.randint simuliert) in einen live Graphen schreiben. Alte Werte sollen nach links "rausgedrückt" werden. Das funktioniert auch soweit, nur dass meine y-Achse sich seltsam verhält. Normalerweise sollten größere Wert höher stehen als kleinere Werte. Bei mir werden die allerdings einfach nach der Reihenfolge in der sie ankommen (zufällig) angeheftet.
Meine Vermutung ist, dass das relativ leicht machbar ist. Ich finde dazu allerdings nichts.
Ich hoffe es findet sich jemand, der mir helfen kann.
Code: Alles auswählen
import time
import threading
import random
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
def temperature_to_txt():
file = open("Temperatur3.txt", "w")
file.close()
while True:
zufalls_temp = random.randint(25, 30)
print(zufalls_temp)
aktuelle_zeit = time.strftime("%H:%M:%S")
with open('Temperatur3.txt') as f:
list_length = (sum(1 for _ in f))
if list_length <= 5:
file = open("Temperatur3.txt", "a")
file.write(str(aktuelle_zeit) + "," + str(zufalls_temp) + "\n")
file.close()
elif list_length > 5:
file = open("Temperatur3.txt", "r")
lines = file.readlines()
lines.pop(0)
file = open("Temperatur3.txt", "w")
file.write(str(lines[0])+str(lines[2])+str(lines[3])+str(lines[4]))
file.write(str(aktuelle_zeit) + "," + str(zufalls_temp) + "\n")
file.close()
time.sleep(1)
def animate(i):
graph_data = open("Temperatur3.txt", "r").read()
lines = graph_data.split("\n")
xs = []
ys = []
for line in lines:
if len(line) > 1:
x, y = line.split(",")
xs.append(x)
ys.append(y)
plt.cla()
plt.plot(xs, ys)
plt.tight_layout()
def main():
threading.Thread(
target = temperature_to_txt, daemon= True
).start()
plt.style.use("fivethirtyeight")
ani = FuncAnimation(plt.gcf(), animate, interval = 1000)
plt.show()
if __name__ == "__main__":
main()