2016-05-30 24 views
1

Matplotlibを使って表面に点を持つ球を描きたいと思います。これらの点は、球体の一方の側から他方の側に螺旋状に螺旋状に接続される。 これを少し明確にするために、プロットは多かれ少なかれ次のようになります:Sphere with points and spiral これを行う方法について誰にもヒントはありますか?Matplotlibで球面上に螺旋で結ばれた描画点

+0

私はそれを理解し、matplotlibのは、真の3Dプロットを持っていないので、それはかもしれません球の内部に落ちた、または球によって妨げられている「ドット」の部分を自動的に取り除くことができないようにしてください。これを行うための独自のコードを書くのではなく、ネイティブに3Dであるmayaviを試すことができます。 –

答えて

1

スパイラル、数式またはポイントのセットのパラメータを知る必要があります。

私はあなたの開始のための球上のマーカーでラインをプロットするためのコードをポストしかし:

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.set_aspect('equal') 

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)) 
elev = 10. 
rot = 80./180. * np.pi 
ax.plot_surface(x, y, z, rstride=1, cstride=1, color='y', linewidth=0, alpha=0.5) 

# plot lines in spherical coordinates system 
a = np.array([-np.sin(elev/180 * np.pi), 0, np.cos(elev/180 * np.pi)]) 
b = np.array([0, 1, 0]) 
b = b * np.cos(rot) + np.cross(a, b) * np.sin(rot) + a * np.dot(a, b) * (1 - np.cos(rot)) 
ax.plot(np.sin(u),np.cos(u),0,color='r', linestyle = '-', marker='o', linewidth=2.5) 

ax.view_init(elev = elev, azim = 0) 
plt.show() 

enter image description here

+0

'markevery' kwargがここで助けてくれるかもしれません。 – tacaswell

関連する問題