2016-08-01 74 views
1

我在(x,y)平面和(x,y,z)平面中有一個隨機漫步器和一個-log(雙變量高斯)。這兩個數據集基本上是獨立的。Python,Matplotlib:在3D圖中繪製垂直線,當數據是獨立的時

我想抽樣,比如5(x,y)對的隨機遊走者,在z軸上畫垂直線,當它「符合」雙變量高斯時終止垂直線。

這是我到目前爲止的代碼:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import random 
import numpy as np 
import seaborn as sns 
import scipy 
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib.mlab import bivariate_normal 

%matplotlib inline 

    # Data for random walk 

def randomwalk(): 

    mpl.rcParams['legend.fontsize'] = 10 

    xyz = [] 
    cur = [0, 0] 

    for _ in range(40): 
     axis = random.randrange(0, 2) 
     cur[axis] += random.choice([-1, 1]) 
     xyz.append(cur[:]) 

    # Get density 

    x, y = zip(*xyz) 
    data = np.vstack([x,y]) 
    kde = scipy.stats.gaussian_kde(data) 
    density = kde(data) 


    # Data for bivariate gaussian 

    a = np.linspace(-7.5, 7.5, 40) 
    b = a 
    X,Y = np.meshgrid(a, b) 
    Z = bivariate_normal(X, Y) 
    surprise_Z = -np.log(Z) 

    # Get random points from walker and plot up z-axis to the gaussian 

    M = data[:,np.random.choice(20,5)].T 

    # Plot figure 

    fig = plt.figure(figsize=(10, 7)) 

    ax = fig.gca(projection='3d') 
    ax.plot(x, y, 'grey', label='Random walk') # Walker 
    ax.scatter(x[-1], y[-1], c='k', marker='o') # End point 

    ax.legend() 

    surf = ax.plot_surface(X, Y, surprise_Z, rstride=1, cstride=1, 
     cmap = plt.cm.gist_heat_r, alpha=0.1, linewidth=0.1) 

    #fig.colorbar(surf, shrink=0.5, aspect=7, cmap=plt.cm.gray_r) 

    for i in range(5): 
     ax.plot([M[i,0], M[i,0]],[M[i,1], M[i,1]], [0,10],'k--',alpha=0.8, linewidth=0.5) 

    ax.set_zlim(0, 50) 
    ax.set_xlim(-10, 10) 
    ax.set_ylim(-10, 10) 

將會產生

enter image description here

正如你可以看到我用的是如何當他們終止垂直線掙扎的唯一的事情滿足適當的Z值。任何想法都歡迎!

回答

1

您目前只能通過使用[0,10]作爲z座標讓這些線條達到10的高度。您可以將循環更改爲以下:

for i in range(5): 
    x = [M[i,0], M[i,0]] 
    y = [M[i,1], M[i,1]] 
    z = [0,-np.log(bivariate_normal(M[i,0],M[i,1]))] 
    ax.plot(x,y,z,'k--',alpha=0.8, linewidth=0.5) 

這需要x和y的每一個點,你遍歷座標並計算覆高斯的高度,這一點,並密謀在那裏。下面是改變強調有關問題的線線型一個情節:

enter image description here

+0

這是令人沮喪的簡單。我發誓我嘗試了類似的東西。但是,謝謝! – TMorville