2016-05-30 42 views
1

我想用Matplotlib在其表面上繪製一個帶有點的球體。這些點應通過從球體的一側螺旋到另一側的螺旋連接。 要澄清這一點情節應該或多或少看起來像這樣:Sphere with points and spiral 有沒有人有關如何做到這一點的提示?通過Matplotlib上的螺旋連接的繪製點

+0

據我瞭解,matplotlib沒有真正的3D繪圖,所以它可能無法自動移除落入球體內或被其阻擋的「點」部分。而不是編寫自己的代碼來做到這一點,你可以嘗試mayavi,這是本地3D。 –

回答

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