import tkinter as tk from tkinter import ttk import numpy as np import matplotlib import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg matplotlib.use('TkAgg') def generate_data(mu, sigma, n=1000): return np.random.normal(loc=mu, scale=sigma, size=n) def draw_plot(ax, mu, sigma): ax.clear() data = generate_data(mu, sigma) ax.hist(data, bins=30, density=True, alpha=0.6, color='steelblue') x = np.linspace(mu - 4 * sigma, mu + 4 * sigma, 300) pdf = (1 / (sigma * np.sqrt(2 * np.pi))) pdf = (1 / (sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2) ax.plot(x, pdf, color='darkred', lw=2) ax.set_title(f'Normal Distribution (μ={mu:.2f}, σ={sigma:.2f})') ax.set_xlabel('Value') ax.set_ylabel('Density') ax.figure.canvas.draw_idle() root = tk.Tk() root.title("Normal Distribution Explorer") fig, ax = plt.subplots(figsize=(5, 3), dpi=100) canvas = FigureCanvasTkAgg(fig, master=root) canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True) slider_frame = ttk.Frame(root, padding=10) slider_frame.pack(fill=tk.X) mu_label = ttk.Label(slider_frame, text="μ (mean):") mu_label.grid(row=0, column=0, sticky="w") mu_var = tk.DoubleVar(value=0.0) mu_slider = ttk.Scale( slider_frame, from_=-10, to=10, orient="horizontal", variable=mu_var, command=lambda e: draw_plot(ax, mu_var.get(), sigma_var.get()) ) mu_slider.grid(row=0, column=1, sticky="ew", padx=5) slider_frame.columnconfigure(1, weight=1) sigma_label = ttk.Label(slider_frame, text="σ (std dev):") sigma_label.grid(row=1, column=0, sticky="w") sigma_var = tk.DoubleVar(value=1.0) sigma_slider = ttk.Scale( slider_frame, from_=0.1, to=5, orient="horizontal", variable=sigma_var, command=lambda e: draw_plot(ax, mu_var.get(), sigma_var.get()) ) sigma_slider.grid(row=1, column=1, sticky="ew", padx=5) draw_plot(ax, mu_var.get(), sigma_var.get()) root.mainloop()