You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动