You need to enable JavaScript to run this app. 如何用Python实现带高斯平滑的二维分布等高线绘图复现论文效果
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现带高斯平滑的二维分布等高线绘图复现论文效果

二维密度等高线绘图的问题定位与修正方案

网格参数的选型逻辑

  • 网格数和天区覆盖范围没有绑定关系:只要np.linspace的端点固定为观测天区的真实RA/DEC极值,不管网格数取100、300还是500,覆盖范围都不会发生变化。你之前调整网格数后覆盖不全,本质是修改参数时误改动了linspace的min/max端点,不是网格数本身的问题。
  • 合适的网格分辨率计算规则:需要保证目标高斯平滑核至少覆盖3-5个网格像素,避免平滑后出现锯齿。以z=0.4天区的0.75Mpc平滑尺度为例,换算成角尺度约为4.2角分,若天区总幅宽约1.5度(90角分),取200-300的网格数即可满足分辨率要求,既不会过粗丢失结构,也不会过密拖慢计算,无需硬编码500这个固定值。

当前实现流程的核心错误

  • 密度计算逻辑错配:你当前流程是读取fits里预先存的离散density值,用griddata线性插值后再做高斯平滑,和论文的计算逻辑完全不一致。论文要求将所有星系位置作为离散点,直接在网格上统计点计数后施加高斯权重得到密度图,先插值再平滑的流程会在稀疏区域引入人为的密度梯度,抹平真实的密度涨落,最终得到类似你之前输出结果的无结构渐变。
  • 高斯平滑的σ单位错配:你当前设置的sigma=[5,5]是像素单位,没有换算到实际角尺度。按常见的天区大小估算,5像素的平滑宽度仅约1角分,远小于要求的4.2角分物理平滑尺度,平滑效果严重不足。正确的σ计算方式为:sigma_pixel = (目标平滑角尺度 / 天区总角幅宽) * 网格数,代入对应参数即可得到符合论文要求的平滑强度。
  • 等高线层级设置错误:你当前用levels = len(colors)的方式自动生成层级,完全没有对应物理定义。正确的层级需要显式绑定密度值,即levels = [density_mean + i*std for i in [1, 1.5, 2, 3, 4, 5]],对应论文要求的平均密度以上1σ到5σ的密度水平。
  • 缺少观测掩膜处理:当前流程没有对掩膜区域做无效值标记,导致掩膜区被插值填满,和参考图中仅绘制大掩膜边界的效果不一致。

匹配参考图的修正步骤

  1. 重新计算原始密度图:在空网格上统计每个单元格内的星系数量,用换算好的σ值对计数图做高斯卷积,归一化得到连续密度分布,替代原有的“读离散密度值-插值-平滑”流程。
  2. 掩膜处理:将观测掩膜对应的网格点值设为np.nan,叠加半透明灰色圆圈标记半径大于2角分的大掩膜边界。
  3. 元素叠加:在对应坐标位置绘制黄色五边形标记CL1、CL2的CAMIRA星系团位置,标注CL3、CL4的过密度区,叠加所有Hα发射体的黑色小散点。
  4. 坐标轴校准:反转RA轴,匹配天文观测的惯例展示方向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 10:06:04