これは非常に簡単に行うことができます。2 つの部分に分けてみましょう。
最初に、固有の 2 次元ポイントを特定してカウントする必要があります。そのためのunique関数とaccumarray関数があります。彼らが何をしていて、どのような出力があるのかすぐにわからない場合は、ドキュメントを読んでください。
x = [11 10 3 8 2 6 2 3 3 2 3 2 3 2 2 2 3 3 2 2];
y = [29 14 28 19 25 21 27 15 24 23 23 18 0 26 11 27 23 30 30 25];
A=[x' y'];
[Auniq,~,IC] = unique(A,'rows');
cnt = accumarray(IC,1);
の各行にAuniq
は一意の 2 次元点がcnt
含まれ、これらの各点の出現回数が含まれています。
>> [cnt Auniq]
ans =
1 2 11
1 2 18
1 2 23
2 2 25
1 2 26
...etc
出現回数を表示するには、非常に多くの可能性があります。あなたが言及したように、散布マーカーの内側/隣に数字を配置できます。他のオプションは、色のエンコード、マーカーのサイズです...これらすべてを実行しましょう。もちろん、組み合わせることもできます!
マーカーの横の数字
scatter(Auniq(:,1), Auniq(:,2));
for ii=1:numel(cnt)
if cnt(ii)>1
text(Auniq(ii,1)+0.2,Auniq(ii,2),num2str(cnt(ii)), ...
'HorizontalAlignment','left', ...
'VerticalAlignment','middle', ...
'FontSize', 6);
end
end
xlim([1 11]);ylim([0 30]);
マーカー内の数字
scatter(Auniq(:,1), Auniq(:,2), (6+2*(cnt>1)).^2); % make the ones where we'll put a number inside a bit bigger
for ii=1:numel(cnt)
if cnt(ii)>1
text(Auniq(ii,1),Auniq(ii,2),num2str(cnt(ii)), ...
'HorizontalAlignment','center', ...
'VerticalAlignment','middle', ...
'FontSize', 6);
end
end
ご覧のとおり、散布関数自体を使用してマーカーのサイズを非常に簡単に拡大しました。
カラーエンコーディング
scatter(Auniq(:,1), Auniq(:,2), [], cnt);
colormap(jet(max(cnt))); % just for the looks of it
その後、カラーバーまたは凡例を追加して、色ごとの出現回数を示すことができます。