You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于方位角、仰角及对应误差值绘制球面热力图

实现球面误差热力图的完整方案

我来一步步帮你把方位角、仰角和误差值整合到球面网格上,画出直观的热力球:

1. 先明确坐标对应关系

你生成的球面网格里:

  • u 对应方位角(azimuth),范围是 0~2π(绕Z轴旋转的角度)
  • v 对应极角(polar angle),范围是 0~π(从Z轴正方向到点的夹角)

而你手上的**仰角(elevation)**通常定义为从水平面(XY平面)向上的角度(范围 0~π/2),所以需要先把仰角转换成极角:

# 假设你的仰角数组是 elev_arr,转换为极角
polar_arr = np.pi / 2 - elev_arr

如果你的仰角包含负值(比如向下的角度),只需要保证转换后 polar_arr 落在 0~π 范围内即可。

2. 将离散误差值插值到球面网格

你的误差数据是离散的三元组(方位角、仰角、误差),而球面网格是均匀采样的,所以需要用插值把离散误差映射到每个网格点上:

步骤:

  • 把你的离散坐标(方位角、转换后的极角)打包成点集
  • 把球面网格的坐标扁平化,作为插值目标点
  • 用插值算法生成每个网格点的误差值

这里推荐用scipy.interpolate.griddata,示例代码:

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ----------------------
# 模拟你的输入数据(替换成你真实的数组)
np.random.seed(42)
az_arr = np.random.uniform(0, 2*np.pi, 50)  # 50个随机方位角
elev_arr = np.random.uniform(0, np.pi/2, 50)  # 50个随机仰角
err_arr = np.random.uniform(0, 10, 50)  # 对应误差值
# ----------------------

# 1. 转换仰角为极角
polar_arr = np.pi / 2 - elev_arr

# 2. 准备插值所需的点集和目标网格
# 离散数据点:(方位角, 极角)
points = np.stack((az_arr, polar_arr), axis=1)
# 网格点扁平化:把u和v的二维网格转成一维点对
grid_u = u.flatten()
grid_v = v.flatten()
grid_points = np.stack((grid_u, grid_v), axis=1)

# 3. 插值得到网格上的误差值(可选method: 'linear'/'cubic'/'nearest')
err_grid = griddata(points, err_arr, grid_points, method='cubic')
# 把插值结果恢复成和u/v一样的二维形状
err_grid = err_grid.reshape(u.shape)

3. 绘制球面热力图

用plot_surface绘制球面,通过facecolors参数把误差值映射为颜色,搭配颜色条展示误差范围:

# 创建3D画布
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 绘制球面热力图,用cmap指定颜色映射(比如'viridis',越亮误差越高)
surf = ax.plot_surface(X, Y, Z, facecolors=plt.cm.viridis(err_grid / np.max(err_grid)),
                       rstride=1, cstride=1, alpha=0.9, linewidth=0.1)

# 添加颜色条,标注误差范围
mappable = plt.cm.ScalarMappable(cmap='viridis')
mappable.set_array(err_grid)
fig.colorbar(mappable, ax=ax, shrink=0.6, label='误差值')

# 设置坐标轴标签和标题
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('球面误差热力图')

# 调整视角,方便观察
ax.view_init(elev=30, azim=45)

plt.show()

关键注意事项

  • 坐标范围检查:确保你的方位角在0~2π,转换后的极角在0~π,否则插值会出错
  • 插值方法选择:如果你的离散数据很稀疏,推荐用'cubic'得到更平滑的效果;如果数据密集,'linear'足够快
  • 颜色映射调整:可以替换cmap参数为其他配色(比如'plasma'/'inferno'),或者用plt.cm.Reds让高误差区域更醒目

内容的提问来源于stack exchange,提问作者jakestackexchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:02:42