如何在pyplot plot_surface中隐藏图形的某些部分以获得更好的python中的3D图形?

时间:2016-11-08 01:35:51

标签: python-3.x matplotlib graphics

我正在尝试为我的项目绘制特定的游览,其中一些特定的边和节点被突出显示。为了做到这一点,我使用第一个plot_surface命令绘制圆环,然后使用plot_wireframe突出显示特定的边和节点。所以,这是我的代码:

    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

如果有人能帮我解决这个问题,我真的很感激。

1 个答案:

答案 0 :(得分:0)

为什么不将半透明度值设置为“1”?

替换

alpha=0.4

alpha=1

中的

ax1.plot_surface