3

球の表面にいくつかの点を描きたいと思います。私の目的のために、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')

これにより、次のプロットが得られます。 球を 1 周する線を含む 3D プロット。 ポイントの 50% のみが表示されます。

残念ながら、すべてのポイントが表示されます。実際に球体の裏側にあるものも。

球の反対側のポイントだけが見えるように、球を不透明にするにはどうすればよいですか?

4

2 に答える 2

3

これは、3D グラフがレンダリングされる方法のために、matplotlib で行うのは簡単ではありません。真の3D サポートはありません。3D から 2D への投影を生成するコードだけがあります。これは 1 人のアーティストにとってはうまく機能し、多くのユース ケースをカバーできますが、アーティストがキャンバスに描かれる方法は、あるアーティストが常に他のアーティストの上にいることを意味します。場所。

「手動で」分割を行い、関数を正しい順序でピースワイズにプロットすることで、これを回避することができます(交差する平面を描画する方法を参照してください) 。物事は「正しく」見えます。

真の 3D を実行できる openGL ベースのプロット パッケージであるmayaviを調べることをお勧めします。

于 2013-04-03T19:52:01.183 に答える
0

モルワイデ図法を使うとどうなる?

#!/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 に答える