2012-11-09 127 views
1

我有从X跨越x和y的二维值 - [1,5]和Y - [0.1 - 0.5]概率表面曲线matplotlib

我怎样才能绘制三维表面,其中轴是x, y和P(y)在matplotlib中?

我在网上发现了在matlab中这样做的代码,但我无法理解它,因此将其转换为matplotlib ...(值的范围是完全不同的,因为下面的书面代码至于我需要的)

mu = [1 -1]; Sigma = [.9 .4; .4 .3]; 
    [X1,X2] = meshgrid(linspace(-1,3,25)', linspace(-3,1,25)'); 
    X = [X1(:) X2(:)]; 
    p = mvnpdf(X, mu, Sigma); 
    surf(X1,X2,reshape(p,25,25)); 

有人可以帮我在做同样的事情matplotlib(也许plot_surface?)

回答

3
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.mlab as mlab 
import numpy as np 

def P(X, Y): 
    return mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)  

fig = plt.figure() 
ax = fig.gca(projection = '3d') 
jet = plt.get_cmap('jet') 

x = np.linspace(-2, 2, 60) 
y = np.linspace(-2, 2, 60) 
X, Y = np.meshgrid(x, y) 
Z = P(X, Y) 
surf = ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = jet, linewidth = 0) 
ax.set_zlim3d(0, Z.max()) 

plt.show() 

产量

enter image description here

+0

嘿,'x = np.linspace(-2,2,60) y = np.linspace(-2,2,60)'是指X和Y的总空间吗?我的x和y的价值何去何从? – anon