如何在 Matlab 中 "smooth" 散点边界

How to "smooth" boundary of scatter in Matlab

我有一个大小为 nx2 的矩阵 A,在 Matlab 中收集 2D 点。它已上传 here(不幸的是,我无法用简单的代码重现它)。

当我使用 scatter 绘制它们时,我得到以下图片,其中

scatter(A(:,1), A(:,2), 50,'k', 'filled') xlim([-4 4]) ylim([-4 4])

问题:请问有没有什么办法可以平滑区域的边界。我考虑过使用 patch,但考虑到该区域是非凸的,我不知道如何获取它的顶点。我还尝试增加散点的大小,但结果更糟。有什么解决办法吗?

您可以使用 boundary 找到构成边界的数据点的 索引 。接下来,您将必须使用这些索引 select 数据点以获得包含数据的 xy 坐标。

% generate some random data
data = randn(100,2) + [3 4];

% find boundary, returns indices of points in data that define boundary
inds = boundary(data(:,1), data(:,2));
data_bound = data(inds,:);

% plot! 
figure(1); clf;
hold on;
fill(data_bound(:,1), data_bound(:,2), 'r'); % fill boundary
scatter(data(:,1),data(:,2),100, 'bx'); % plot data points
plot(data_bound(:,1), data_bound(:,2), 'k', 'linewidth', 2); % boundary