123 lines
6.0 KiB
Python
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() |