Mind-Controlled-Shock-Collar/animate_graph.py
2024-06-19 22:32:41 -06:00

123 lines
6.0 KiB
Python

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from os.path import exists
import os
import time
limit_points = 0 # TODO: Fix markers not following when points are limited.
pop = 0
marked = []
index = 0
def graph(file, event):
event.wait()
style.use('seaborn-v0_8')
fig, ax = plt.subplots(3, 4, figsize=(19, 11))
ax = ax.flatten()
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.tight_layout()
def animate(i):
global limit_points, pop, marked, index
graph_data = open(file,'r').read()
lines = graph_data.split('\n')
xs = []
y_strength = []
y_attention = []
y_meditation = []
y_delta = []
y_theta = []
y_low_alpha = []
y_high_alpha = []
y_low_beta = []
y_high_beta = []
y_low_gamma = []
y_high_gamma = []
for line in lines:
if len(line) > 1:
index, strength, attention, meditation, delta, theta, low_alpha, high_alpha, low_beta, high_beta, low_gamma, high_gamma = line.split(",")
y_strength.append(float(strength))
y_attention.append(float(attention))
y_meditation.append(float(meditation))
y_delta.append(float(delta))
y_theta.append(float(theta))
y_low_alpha.append(float(low_alpha))
y_high_alpha.append(float(high_alpha))
y_low_beta.append(float(low_beta))
y_high_beta.append(float(high_beta))
y_low_gamma.append(float(low_gamma))
y_high_gamma.append(float(high_gamma))
xs.append(float(index))
#for i in range(1,12):
#eval("ax"+str(i)+".clear()")
#ax.clear()
if limit_points > 0:
if int(index) > limit_points:
pop = 0
for i in range(int(index)-limit_points):
if len(xs) != 0:
xs.pop(0)
y_strength.pop(0)
y_attention.pop(0)
y_meditation.pop(0)
y_delta.pop(0)
y_theta.pop(0)
y_low_alpha.pop(0)
y_high_alpha.pop(0)
y_low_beta.pop(0)
y_high_beta.pop(0)
y_low_gamma.pop(0)
y_high_gamma.pop(0)
pop += 1
if len(marked) != 0:
for i in range(len(marked)):
marked[i] = marked[i] - 1
if marked[0] == 0:
marked.pop(0)
file_exists = exists("./mark")
if file_exists:
print("Marking " + str(xs[len(xs) - 1])) #Mark in CSV file?
marked.append(int(xs[len(xs) - 1]-pop))
print("Marked: " + str(marked) + " Pop: " + str(pop))
pop = 0
os.remove("./mark")
for i in range(12):
ax[i].clear()
if len(y_strength) == 0: #If the CSV restarts
print("Clearing marked")
marked = []
ax[0].plot(xs, y_strength, color="b", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_attention, color="g", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_meditation, color="r", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_delta, color="c", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_theta, color="m", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_low_alpha, color="y", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_high_alpha, color="k", markevery=marked, marker="D", markerfacecolor="white")
ax[0].plot(xs, y_low_beta, color="b", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_high_beta, color="g", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_low_gamma, color="r", markevery=marked, marker="D", markerfacecolor="black")
ax[0].plot(xs, y_high_gamma, color="c", markevery=marked, marker="D", markerfacecolor="black")
if len(y_strength) > 0:
if int(y_strength[len(y_strength)-1]) != 0:
ax[1].plot(xs, y_strength, label="strength", color="r", markevery=marked, marker="D", markerfacecolor="black")
else:
ax[1].plot(xs, y_strength, label="strength", color="b", markevery=marked, marker="D", markerfacecolor="black")
ax[2].plot(xs, y_attention, label="attention", color="g", markevery=marked, marker="D", markerfacecolor="black")
ax[3].plot(xs, y_meditation, label="meditation", color="r", markevery=marked, marker="D", markerfacecolor="black")
ax[4].plot(xs, y_delta, label="delta", color="c", markevery=marked, marker="D", markerfacecolor="black")
ax[5].plot(xs, y_theta, label="theta", color="m", markevery=marked, marker="D", markerfacecolor="black")
ax[6].plot(xs, y_low_alpha, label="low_alpha", color="y", markevery=marked, marker="D", markerfacecolor="black")
ax[7].plot(xs, y_high_alpha, label="high_alpha", color="k", markevery=marked, marker="D", markerfacecolor="white")
ax[8].plot(xs, y_low_beta, label="low_beta", color="b", markevery=marked, marker="D", markerfacecolor="black")
ax[9].plot(xs, y_high_beta, label="high_beta", color="g", markevery=marked, marker="D", markerfacecolor="black")
ax[10].plot(xs, y_low_gamma, label="low_gamma", color="r", markevery=marked, marker="D", markerfacecolor="black")
ax[11].plot(xs, y_high_gamma, label="high_gamma", color="c", markevery=marked, marker="D", markerfacecolor="black")
for i in range(12):
ax[i].legend()
print("animate_graph: Starting animation")
ani = animation.FuncAnimation(fig, animate, interval=500)
plt.show()