我想使用plot_surface绘制球体上的强度。问题是,我不可能正常化颜色并正确设置colobar。我在互联网上找到的所有解决方案都不适用于我。
我写的代码使用球体表面到特定向量d的距离作为强度。下面是我的代码:
def FieldTranslation(N = 250, d = [-0.001, 0, 0], R = 1):
d = np.array(d)
t = np.linspace(0, np.pi, N)
p = np.linspace(0, 2*np.pi, N)
t, p = np.meshgrid(t, p)
X = R * np.sin(t) * np.cos(p)
Y = R * np.sin(t) * np.sin(p)
Z = R * np.cos(t)
C = np.sqrt((X - d[0])**2 + (Y - d[1])**2 + (Z - d[2])**2)
CMax = np.maximum(C[..., 0], C[..., 1], C[..., 2])
C = C / CMax
if np.sum(d) == 0:
print('round')
C = np.round(C, 1)
fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
scamap = plt.cm.ScalarMappable(cmap='inferno')
fcolors = scamap.to_rgba(C)
minn = -1 # fcolors.min()
maxx = 1 # fcolors.max()
s = ax.plot_surface(X, Y, Z, facecolors=fcolors, cmap='inferno', vmin = minn, vmax = maxx)
fig.colorbar(s)
plt.show()
这段代码创建了一个像这样的图像:
在这里,坐标轴不适合图的颜色,而且,在表面上只应该有幻灯片变化(当查看C中的数字时)。
如果我设置d = [0,0,0],整个球体变成黑色,但C值都是1。
我已经检查了论坛并从其他人那里复制了代码,但没有任何工作。
1条答案
按热度按时间tcomlyy61#
从
s
绘制的颜色条是从Z
组件绘制的。您应该将您创建的自定义
scamap
赋予给予fig.colorbar
: