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()
KED2d,二维概率密度估计函数
最新推荐文章于 2025-02-23 20:10:16 发布