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

如何在Matlab的GMCM中仅绘制外部轮廓线?

调整GMCM二维轮廓图函数以仅显示外部轮廓线

要实现仅显示GMCM(高斯混合Copula模型)的外部轮廓线,核心是调整contour函数的轮廓水平参数——原代码用最小值和最大值组合会画出多余内层轮廓,我们需要选择对应数据分布边缘的概率阈值来生成单一外部轮廓。

修改步骤:

1. 替换轮廓水平的计算逻辑

原代码直接取Z的最小、最大值作为轮廓水平,不符合需求。我们改为计算Z的低百分位数(比如5%,可根据数据调整),这个阈值对应分布的边缘区域,刚好能包围大部分数据点。

替换原代码中的:

min_level = min(min(Z))
max_level = max(max(Z))

为:

% 选择对应外部轮廓的概率阈值,这里取Z的5%分位数(可按需调整)
contour_level = prctile(Z(:), 5);

2. 修改contour函数调用

只使用上述计算的单一阈值绘制轮廓,去掉内层的最大值轮廓:

替换原代码中的:

contour(xgrid,ygrid,Z,'LevelList',[min_level, max_level],'EdgeColor',[1 0 0]);

为:

contour(xgrid,ygrid,Z,'LevelList',contour_level,'EdgeColor',[1 0 0]);

3. 可选:调整阈值控制轮廓紧密程度

如果觉得轮廓太松或太紧,可修改百分位数数值:

  • 百分位数越小(比如2%),轮廓范围越大,能包围更多边缘点
  • 百分位数越大(比如10%),轮廓范围越小,更贴近数据核心

完整修改后的关键代码片段:

Z = exp(Z); 

% 计算外部轮廓对应的阈值(5%分位数)
contour_level = prctile(Z(:), 5);

plot(givenData(:,1),givenData(:,2),'b.','MarkerSize',3);hold on
% 仅绘制单一外部轮廓线
contour(xgrid,ygrid,Z,'LevelList',contour_level,'EdgeColor',[1 0 0]);
axis tight;

原理说明

GMCM的似然值Z在数据密集区域数值高,边缘区域数值低。通过选择低百分位数的Z值作为轮廓水平,我们能得到刚好包围大部分数据点的外部边界,而非原代码中包含的核心区域(最大值)和超大范围(最小值)的双重轮廓。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:25:20