2014-04-17 5 views
0

Je voudrais tracer un tracé 3D d'une sphère, qui colore différemment les sections en fonction d'une fonction des coordonnées thêta, phi. Je pourrais représenter graphiquement deux graphiques distincts, un de chaque couleur, mais je ne sais pas exactement comment fonctionne le maillage/quadrillage lors du traçage. Viz. Je veux quadriller/mailler tous les thetas/phis dans une sphère, mais ensuite jeter certaines paires avec une fonction booléenne. Est-ce possible? Ci-joint une image d'un nuage de points qui fait ce que j'aimerais faire avec les surfaces. colored sphereColoriage booléen Matplotlib

+0

Avez-vous un code pour le tracé de votre sphère (sans changement de couleur évidemment)? – Ffisegydd

Répondre

2

Basé sur scatter3d_demo.py trouvé dans le matplotlib 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() 

cède

enter image description here


Notez que vous pouvez également des taches de couleur sur une sphère en utilisant plot_surface:

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