3D曲面图颜色与数据不匹配及颜色条设置问题求助
3D曲面图颜色与数据不匹配及颜色条设置问题求助
我想用plot_surface绘制球体表面的强度分布,但一直搞不定颜色归一化和颜色条的正确设置,网上找的各种解决方案都不管用,实在头疼。
我的思路是用球面上每个点到特定向量d的距离作为强度值,下面是我写的代码:
import numpy as np import matplotlib.pyplot as plt 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,这明显不符合预期
我已经逛了不少论坛,也抄过别人的代码,但都解决不了问题,有没有大佬能帮我看看哪里出问题了?
备注:内容来源于stack exchange,提问作者FilouUms




