Я много читал о рисовании многоугольников вокруг кластеров и понял, что свернуть, возможно, лучший путь вперед. В основном я ищу эластичный многоугольник, чтобы обернуть его вокруг точек кластера.
Мои данные представляют собой матрицу, состоящую из точек x (1-й столбец) и y (2-й столбец), которые сгруппированы в кластеры (3-й столбец). У меня есть 700 таких кластеров, поэтому невозможно построить каждый отдельно.
Есть ли способ выполнить convhull для каждого кластера отдельно, а затем построить каждый из них на одной диаграмме.
ИЗМЕНИТЬ
Код, который я написал до сих пор, не может запускать выпуклый корпус для каждого отдельного кластера ...
[ndata, text, alldata] = xlsread(fullfile(source_dir));
[~, y] = sort(ndata(:,end));
As = ndata(y,:);
lon = As(:,1);
lat = As(:,2);
cluster = As(:,3);
%% To find number of points in a cluster (repetitions)
rep = zeros(size(cluster));
for j = 1:length(cluster)
rep(j) = sum(cluster==cluster(j));
end
%% Less than 3 points in a cluster are filtered out
x = lon (rep>3);
y = lat (rep>3);
z = cluster (rep>3);
%% convex hull for each cluster plotted ....hold....then display all.
figure
hold on
clusters = unique(z);
for i = 1:length(z)
k=convhull(x(z==clusters(i)), y(z==clusters(i)));
plot(x, y, 'b.'); %# plot cluster points
plot(x(k),y(k),'r-'); %# plots only k indices, giving the convex hull
end
Ниже приведено изображение того, что отображается;
Если этот вопрос уже задавался, прошу прощения за повторение, но, пожалуйста, дайте мне ответ, который вы сочтете нужным.
Пожалуйста, может ли кто-нибудь помочь с этим, как бы тривиально я ни боролся!
x(k)
индексируется в неправильный массив (нефильтрованныйx
вместоx(z==clusters(i))(k)
)? - person Has QUIT--Anony-Mousse   schedule 04.03.2014