使用 kde 绘制 3D 数据等高线
3D data contour ploting using a kde
我有两个位置数据数组 (X,Y) 和一个相应的一维整数数组 (Z),用于对位置数据进行加权。所以我的数据集看起来像这样:
X = [ 507, 1100, 1105, 1080, 378, 398, 373]
Y = [1047, 838, 821, 838, 644, 644, 659]
Z = [ 300, 55, 15, 15, 55, 15, 15]
我想使用该数据创建一个 KDE,它等同于仅获取 X 和 Y 作为输入但获取 X 和 Y 值 Z 次的 KDE。将该 KDE 应用于 np.mgrid 以创建等高线图。
我已经通过在 FOR 循环中遍历数组并添加 Z 次 X 和 Y 来让它工作,但在我看来这是一个相当不优雅的解决方案,我希望你能帮助我找到更好的方法这样做。
您可以使用 scipy.stats.gaussian_kde
的 weights=
参数:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np
from scipy import stats
X = [ 507, 1100, 1105, 1080, 378, 398, 373]
Y = [1047, 838, 821, 838, 644, 644, 659]
Z = [ 300, 55, 15, 15, 55, 15, 15]
kernel = stats.gaussian_kde(np.array([X, Y]), weights=Z)
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
xs, ys = np.mgrid[0:1500:30j, 0:1500:30j]
zs = kernel(np.array([xs.ravel(), ys.ravel()])).reshape(xs.shape)
ax.plot_surface(xs, ys, zs, cmap="hot_r", lw=0.5, rstride=1, cstride=1, ec='k')
plt.show()
我有两个位置数据数组 (X,Y) 和一个相应的一维整数数组 (Z),用于对位置数据进行加权。所以我的数据集看起来像这样:
X = [ 507, 1100, 1105, 1080, 378, 398, 373]
Y = [1047, 838, 821, 838, 644, 644, 659]
Z = [ 300, 55, 15, 15, 55, 15, 15]
我想使用该数据创建一个 KDE,它等同于仅获取 X 和 Y 作为输入但获取 X 和 Y 值 Z 次的 KDE。将该 KDE 应用于 np.mgrid 以创建等高线图。
我已经通过在 FOR 循环中遍历数组并添加 Z 次 X 和 Y 来让它工作,但在我看来这是一个相当不优雅的解决方案,我希望你能帮助我找到更好的方法这样做。
您可以使用 scipy.stats.gaussian_kde
的 weights=
参数:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np
from scipy import stats
X = [ 507, 1100, 1105, 1080, 378, 398, 373]
Y = [1047, 838, 821, 838, 644, 644, 659]
Z = [ 300, 55, 15, 15, 55, 15, 15]
kernel = stats.gaussian_kde(np.array([X, Y]), weights=Z)
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
xs, ys = np.mgrid[0:1500:30j, 0:1500:30j]
zs = kernel(np.array([xs.ravel(), ys.ravel()])).reshape(xs.shape)
ax.plot_surface(xs, ys, zs, cmap="hot_r", lw=0.5, rstride=1, cstride=1, ec='k')
plt.show()