0
我想繪製一個球體的三維圖,根據theta,phi座標的一些函數對不同部分進行着色。我可以繪製兩個單獨的圖形,每種顏色之一,但我不確定繪圖時的網格劃分/網格劃分是如何工作的。即我想要在一個球體中的所有theta/phis上進行網格/網格劃分,然後在給定布爾函數的情況下丟棄某些對。這可能嗎?附件是散點圖的圖片,它可以完成我想要對曲面進行的操作。 Matplotlib布爾着色
我想繪製一個球體的三維圖,根據theta,phi座標的一些函數對不同部分進行着色。我可以繪製兩個單獨的圖形,每種顏色之一,但我不確定繪圖時的網格劃分/網格劃分是如何工作的。即我想要在一個球體中的所有theta/phis上進行網格/網格劃分,然後在給定布爾函數的情況下丟棄某些對。這可能嗎?附件是散點圖的圖片,它可以完成我想要對曲面進行的操作。 Matplotlib布爾着色
基於scatter3d_demo.py在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()
得到你也可以使用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()
做(沒有顏色變化明顯)你有你的球的繪製任何代碼? – Ffisegydd