2014-04-17 49 views
0

我想繪製一個球體的三維圖,根據theta,phi座標的一些函數對不同部分進行着色。我可以繪製兩個單獨的圖形,每種顏色之一,但我不確定繪圖時的網格劃分/網格劃分是如何工作的。即我想要在一個球體中的所有theta/phis上進行網格/網格劃分,然後在給定布爾函數的情況下丟棄某些對。這可能嗎?附件是散點圖的圖片,它可以完成我想要對曲面進行的操作。 colored sphereMatplotlib布爾着色

+0

做(沒有顏色變化明顯)你有你的球的繪製任何代碼? – Ffisegydd

回答

2

基於scatter3d_demo.pymatplotlib tutorial發現:

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

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 

THETA, PHI = np.ogrid[0:2*np.pi:40j, 0:np.pi:30j] 

X = 10 * np.cos(THETA) * np.sin(PHI) 
Y = 10 * np.sin(THETA) * np.sin(PHI) 
Z = 10 * np.ones_like(THETA) * np.cos(PHI) 

def func(THETA, PHI): 
    mask = (THETA < np.pi/2) & (np.pi/3 < PHI) & (PHI < 2 * np.pi/3) 
    return np.where(mask, 1, 0.5) 

C = func(THETA, PHI) 

x = X.ravel() 
y = Y.ravel() 
z = Z.ravel() 

c = C.ravel() 
ax.scatter(x, y, z, c=c, s=30, vmin=0, vmax=1) 
ax.set_aspect('equal') 
plt.show() 

得到你也可以使用plot_surface球體上的色塊

enter image description here


注:

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

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

THETA, PHI = np.ogrid[0:2*np.pi:40j, 0:np.pi:30j] 

X = 10 * np.cos(THETA) * np.sin(PHI) 
Y = 10 * np.sin(THETA) * np.sin(PHI) 
Z = 10 * np.ones_like(THETA) * np.cos(PHI) 

def func(THETA, PHI): 
    mask = (THETA < np.pi/2) & (np.pi/3 < PHI) & (PHI < 2 * np.pi/3) 
    return np.where(mask, 1, 0.5) 

C = func(THETA, PHI) 
jet = plt.cm.jet 
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, facecolors=jet(C)) 
ax.set_aspect('equal') 
plt.show() 

enter image description here

相關問題