如何在Matlab中“平滑”散射边界

时间:2019-10-31 08:48:34

标签: matlab plot scatter

我有一个大小为A的矩阵nx2,在Matlab中收集2D点。它已上载here(很遗憾,我无法使用简单的代码来复制它)。

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

  • 黑色区域非凸形

  • 该区域的边界非常“不平滑”,沿边界相当清楚地显示了散点。

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

enter image description here

问题:我想知道是否存在一种使区域边界平滑的方法。我考虑过使用patch,但是鉴于该区域是非凸的,因此我不知道如何获得其顶点。我也尝试增加散点的大小,但结果更糟。有解决办法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用boundary查找形成边界的数据点的索引。接下来,您将必须使用这些索引选择数据点,以获取包围数据的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

enter image description here