2016-11-08 243 views
0

我想繪製一個特定的遊覽項目,其中一些特定的邊和節點突出顯示。爲了做到這一點,我首先使用plot_surface命令繪製圓環,然後使用plot_wireframe來突出顯示特定的邊和節點。所以,這裏是我的代碼:如何在pyplot plot_surface中隱藏圖的某些部分以獲得更好的python圖形?

from mpl_toolkits.mplot3d import Axes3D 
    from mpl_toolkits.mplot3d import * 
    import matplotlib.pyplot as plt 
    import numpy as np 
    from random import random, seed 
    from matplotlib import cm 
    from matplotlib import colors 
    import matplotlib as mpl 
    # mpl.rcParams['lines.linewidth'] = 5 

    plt.hold(True) 
    n = 30 
    theta = np.linspace(0, 2.*np.pi, n) 
    phi = np.linspace(0, 2.*np.pi, n) 
    theta, phi = np.meshgrid(theta, phi) 
    c, a = 2, 1 
    x = (c + a*np.cos(theta)) * np.cos(phi) 
    y = (c + a*np.cos(theta)) * np.sin(phi) 
    z = a * np.sin(theta) 
    fig = plt.figure() 
    ax1 = fig.add_subplot(111, projection='3d') 
    ax1.set_zlim(-2,2) 
    ax1.scatter(x,y,z+0.001,color="black",s=1,marker='o') 
    for i in range(n): 
     if(i%3==0): 
      color='yellowgreen' 
     elif(i%3==1): 
      color="silver" 
     else: 
      color="cyan" 
     ax1.plot_surface(x[i:i+2], y[i:i+2], z[i:i+2], rstride=3, cstride=1, edgecolors=color,color=color,alpha=0.4,shade=False) 
    ax1.plot_wireframe(x, y, z,rstride=3, cstride=1,color='r',alpha=0.4) 
    ax1.view_init(36, 26) 
    plt.show() 

這是數字我得到:

enter image description here

正如你所看到的,我的形象後面的部分是可見的,當你從前面截圖中看到它這使得數字不太清晰。我想讓它的後面部分在任何方向上都不可見。換句話說,我希望得到某物類似這樣的圖片(我用我的第一個圖像上的Photoshop得到這一個,但我想我的代碼自動爲我做到這一點):

enter image description here

我如果有人能夠幫助我解決這個問題,我將非常感激。

回答

0

爲什麼不將半透明度值設置爲「1」?

更換

alpha=0.4 

alpha=1 

ax1.plot_surface 
+0

答案是不正確的。我不知道你是否已經測試了你的答案,但是我剛剛檢查過它沒有任何影響。 – Infintyyy

+0

您是否也將線框alpha設置爲1?我相信你沒有。你的陰謀清楚地顯示半透明 –

+0

對不起,現在檢查它,你必須從你的線框生成一個表面並填充它,你不能設置半透明線框。 –