2012-11-09 82 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