3

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

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 绘图。 只有 50% 的点应该是可见的。

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

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

4

2 回答 2

3

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

您可以通过“手动”进行拆分并以正确的顺序绘制函数来解决此问题(请参阅如何绘制相交平面? ),但这意味着您不能旋转出一些小的视角并拥有事情看起来“正确”。

我建议研究mayavi,它是一个基于 openGL 的绘图包,可以做真正的 3D。

于 2013-04-03T19:52:01.183 回答
0

什么将使用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()
于 2013-12-08T15:20:24.507 回答