import numpy as np import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import tkinter as tk from tkinter import ttk from dataset_content import get_data_from_json from isolation_forest import apply_isolation_forest from oc_svm import apply_oc_svm def plot_data(num_dimensions): rng = np.random.RandomState(42) X = get_data_from_json() # Apply algorithm plotted_result = apply_isolation_forest(rng, X) if combo_box_alg.current() == 0 else apply_oc_svm(X) # Plotting fig, ax = plt.subplots(figsize=(10, 7), subplot_kw={'projection': '3d'} if num_dimensions == 3 else {}) if num_dimensions == 3: ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=['red' if pred == -1 else 'blue' for pred in plotted_result], s=50) ax.set_xlabel("Distance travelled") ax.set_ylabel("Heartrate") ax.set_zlabel("Weight") else: x_axis = X[:, 0] y_axis = np.zeros_like(X[:, 0]) if num_dimensions == 1 else X[:, 1] ax.scatter(x_axis, y_axis, c=['red' if pred == -1 else 'blue' for pred in plotted_result], s=50) ax.set_xlabel("Distance travelled") ax.set_ylabel("Heartrate" if num_dimensions > 1 else "") plt.grid(True) return fig # Create the main window root = tk.Tk() root.title("Dimension Selector") def update_plot(event): num_dimensions = int(combo_box_dim.get()[0]) fig = plot_data(num_dimensions) canvas = FigureCanvasTkAgg(fig, master=root) canvas_widget = canvas.get_tk_widget() canvas_widget.grid(row=1, column=0, columnspan=4) canvas.draw() # Dimension selection combo_box_dim = ttk.Combobox(root, values=("1 Dimension", "2 Dimensions", "3 Dimensions"), state="readonly") combo_box_dim.grid(row=0, column=1, pady=10) combo_box_dim.current(2) combo_box_dim.bind("<>", update_plot) # Algorithm selection combo_box_alg = ttk.Combobox(root, values=("Isolation Forest", "One-Class Support Vector Machine"), state="readonly") combo_box_alg.grid(row=0, column=2, pady=10) combo_box_alg.current(0) combo_box_alg.bind("<>", update_plot) update_plot(None) root.mainloop()