小编nv_*_*_wu的帖子

如何使用matplotlib在python中绘制3D密度图

我有一个大的(x,y,z)蛋白质位置数据​​集,并希望绘制高占有率的区域作为热图.理想情况下,输出应该类似于下面的体积可视化,但我不确定如何使用matplotlib实现这一点.

http://i.stack.imgur.com/nsNEL.jpg

我最初的想法是将我的位置显示为3D散点图,并通过KDE为其密度着色.我用测试数据将其编码如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D 

mu, sigma = 0, 0.1 
x = np.random.normal(mu, sigma, 1000)
y = np.random.normal(mu, sigma, 1000)
z = np.random.normal(mu, sigma, 1000)

xyz = np.vstack([x,y,z])
density = stats.gaussian_kde(xyz)(xyz) 

idx = density.argsort()
x, y, z, density = x[idx], y[idx], z[idx], density[idx]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c=density)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这很好用!但是,我的真实数据包含数千个数据点,并且计算kde和散点图变得非常慢.

我的真实数据的一小部分:

http://i.stack.imgur.com/BFT5V.png

我的研究表明,更好的选择是评估网格上的高斯kde.我只是不确定如何在3D中:

import numpy as np
from scipy import stats
import …
Run Code Online (Sandbox Code Playgroud)

python matplotlib scipy kernel-density mayavi

24
推荐指数
1
解决办法
2万
查看次数

标签 统计

kernel-density ×1

matplotlib ×1

mayavi ×1

python ×1

scipy ×1