KED2d,二维概率密度估计函数

该代码使用numpy和matplotlib库进行2D核密度估计(KDE),通过gaussian_kde函数计算概率密度,并用contourf和contour生成等高线填充图和轮廓图,最后保存为.png图像。此过程适用于数据分布的可视化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import matplotlib.pyplot as pl
import matplotlib.pyplot as plt
import scipy.stats as st
#from list import list
#求概率密度
def KED2d(x, y, a, b,path):

    #找到数据的最大最小值
    xmin, xmax = min(x), max(x)
    ymin, ymax = min(y), max(y)

    #核密度估计
    #xx和yy是概率密度函数的网格点
    #用于创建二维网格点坐标数组。
    xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
    #用于将两个一维数组按列方向堆叠成一个二维数组。
    positions = np.vstack([xx.ravel(), yy.ravel()])
    #用于将两个一维数组按列方向堆叠成一个二维数组。
    values = np.vstack([x, y])
    #用于进行核密度估计。
    kernel = st.gaussian_kde(values)
    #f: 估计的概率密度函数值
    #其中每个元素f[i][j]表示平面上坐标为(xx[i][j], yy[i][j])的点处的概率密度值。
    f = np.reshape(kernel(positions).T, xx.shape)
    
    #画图
    fig = pl.figure()
    ax = fig.gca()
    ax.set_xlim(xmin, xmax)
    ax.set_ylim(ymin, ymax)
    # 等高线图or核密度估计图
    #xx和yy作为横纵坐标,将f作为高度值,绘制了一张二维等高线填充图
    #xx、yy、f为100*100大小的数组:f[i][j] = F(xx[i][j], yy[i][j])
    cfset = ax.contourf(xx, yy, f, cmap='Blues')
    cset = ax.contour(xx, yy, f, colors='k')
    #标签绘图
    ax.clabel(cset, inline=1, fontsize=20)
    
    ax.set_title("概率密度分布",fontproperties = 'SimHei')
    ax.set_xlabel(a)
    ax.set_ylabel(b)
    plt .savefig (path + a + '_' + b +'.png', bbox_inches ='tight')
    plt.ioff()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值