如何在matplotlib中的不透明曲面上绘制图形?

如何在matplotlib中的不透明曲面上绘制图形?,matplotlib,Matplotlib,我想在球面上画一些点。出于我的目的,我需要能够绘制三维球体周围的线条。球体应不透明,以便在视图中只能看到球体可见一半上的点。目前,我正在使用以下代码段绘制点: fig = plt.figure() ax = fig.add_subplot(111, projection='3d') u = np.linspace(0, 2 * np.pi, 100) v = np.linspace(0, np.pi, 100) x = 1 * np.outer(np.cos(u), np.sin(v)) y =

我想在球面上画一些点。出于我的目的,我需要能够绘制三维球体周围的线条。球体应不透明,以便在视图中只能看到球体可见一半上的点。目前,我正在使用以下代码段绘制点:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 1 * np.outer(np.cos(u), np.sin(v))
y = 1 * np.outer(np.sin(u), np.sin(v))
z = 1 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')
plt.plot(CatVec[:,0],CatVec[:,1],CatVec[:,2],'ro')
这给了我以下的情节:

不幸的是,所有的点都是可见的。还有那些实际上在球体背面的


如何使球体不透明,以便只有球体对面的点可见?

由于3D图形的渲染方式,使用matplotlib很难做到这一点。没有真正的3D支持,只有生成从3D到2D投影的代码。这对于单个艺术家来说非常有效,可以覆盖很多用例,但是艺术家被画到画布上的方式意味着一个艺术家总是在另一个艺术家之上,在某些地方无法让艺术家切换顺序

您可以通过“手动”拆分并以正确的顺序绘制函数来解决这一问题(请参见),但这意味着您不能旋转出某个小视角,使事物看起来“正确”


我建议研究一下哪一个是基于openGL的绘图软件包,可以实现真正的3D。

如何使用Mollweide投影

#!/usr/bin/env python

#some hints from here http://wiki.scipy.org/Cookbook/Matplotlib/Maps

import os
import sys
import numpy
from pylab import *
from mpl_toolkits.basemap import Basemap
from matplotlib import rc
import matplotlib.pyplot as plt

fig = plt.figure()
m=Basemap(projection='moll',lon_0=0,resolution='c')

m.drawmeridians(arange(0, 360, 30))
m.drawparallels(arange(-90, 90, 30))

lats=np.zeros(3,dtype=np.float)
lons=np.zeros(3,dtype=np.float)

lats[0] = 0; lats[1]=30; lats[2]=60
lons[0] = 0; lons[1]=30; lons[2]=-30

x,y = m(lons,lats)

plt.plot(x,y,'r')

plt.savefig('a.ps')
close()

如果你先画点,然后画曲面呢?这不会改变任何东西,但是谢谢你的思考。非常感谢!我会调查那个包裹。