Python 代码(tkinter) + Numpy + Scipy + matplotlib:给定参数\mu,\sigma,展示对应的正态分布概率密度图;通过动态调整参数\mu或\sigma,展示图像的变化,在一个窗口中动态调节
时间: 2024-05-03 09:18:22 浏览: 180
课程设计基于Python+tkinter+SQLServer实现的图书管理系统的设计与实现
好的,以下是代码实现:
```python
import tkinter as tk
from tkinter import ttk
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
class NormalDistributionPlotter:
def __init__(self, master):
self.master = master
master.title("Normal Distribution Plotter")
# 设置初始参数
self.mu = 0
self.sigma = 1
# 创建 tk 组件
self.mu_label = ttk.Label(master, text="mu:")
self.mu_scale = ttk.Scale(master, from_=-10, to=10, orient=tk.HORIZONTAL, command=self.update_mu)
self.sigma_label = ttk.Label(master, text="sigma:")
self.sigma_scale = ttk.Scale(master, from_=0.1, to=10, orient=tk.HORIZONTAL, command=self.update_sigma)
self.canvas = plt.figure(figsize=(5, 4)).add_subplot(111)
self.plot()
# 设置 tk 组件位置
self.mu_label.grid(row=0, column=0, padx=5, pady=5)
self.mu_scale.grid(row=0, column=1, padx=5, pady=5)
self.sigma_label.grid(row=1, column=0, padx=5, pady=5)
self.sigma_scale.grid(row=1, column=1, padx=5, pady=5)
self.canvas.get_tk_widget().grid(row=2, column=0, columnspan=2, padx=5, pady=5)
def update_mu(self, value):
self.mu = float(value)
self.plot()
def update_sigma(self, value):
self.sigma = float(value)
self.plot()
def plot(self):
# 计算概率密度函数
x = np.linspace(self.mu - 4 * self.sigma, self.mu + 4 * self.sigma, 100)
y = norm.pdf(x, loc=self.mu, scale=self.sigma)
# 清空画布
self.canvas.clear()
# 绘制新图像
self.canvas.plot(x, y)
self.canvas.set_xlabel('x')
self.canvas.set_ylabel('Probability density')
self.canvas.set_title('Normal Distribution')
# 更新画布
self.canvas.figure.canvas.draw()
root = tk.Tk()
app = NormalDistributionPlotter(root)
root.mainloop()
```
这段代码使用了 tkinter、Numpy、Scipy 和 matplotlib 库,实现了一个窗口应用程序,可以动态展示正态分布概率密度图,并且可以通过滑块动态调整参数 $\mu$ 或 $\sigma$,实现图像的动态变化。
阅读全文