MATLAB:同じ座標で複数のポイントをプロットします
-
29-10-2019 - |
質問
Matlabでプロットしたいデータがいくつかあります。データは、私が望むポイントのxおよびy座標で構成されています。現時点では、プロット関数を使用してこれらのポイントをプロットしています。
データには、同じ座標を持つ多くのポイントがあります。さて、私が望んでいるのは、同じ座標を持つポイントが単一のドットとしてではなく、厚いドットとしてプロットすることです。
たとえば、ポイントがあると仮定します
1,1
2,1
2,1
3,2
2,1
2,1
1,1
次に、プロットには3,2に単一のドットがありますが、1,1でより厚いドット、さらには2,1でより厚いドットが必要です。
誰かがこれを行う方法を教えてもらえますか?
解決
少し創造性を使用できます scatter
これを行う機能。
まず、データをポイントのリストに削減する必要があります。さらに、各場所でポイント数の数をカウントする必要があります。
たとえば、データがある場合:
xy = [...
1,1; ...
2,1; ...
2,1; ...
3,2; ...
2,1; ...
2,1; ...
1,1];
一意のポイントと一意のインデックスを取得します。
[xyUnique, ignore, ixs] = unique(xy,'rows')
これはかなり苦痛ですが、各一意の行の発生数を使用して数えることができます ixs
ベクトル(おそらくより良い方法があります)。
counts = zeros(size(xyUnique,1),1);
for ix = 1:size(counts,1);
counts(ix) = sum(ixs == ix);
end
今、散布を使用してあなたが望むようにプロットを作ります
scatter(...
xyUnique(:,1), ... %X values
xyUnique(:,2), ... %Y values
counts*20, ... %Individual marker sizes, note scale factor to make this visible
'b', ... %Marker colors
'filled'); %I think these look better filled
他のヒント
ループを避けるために、前の例に基づいて構築するには、これを試してください。
xy = [...
1,1; ...
2,1; ...
2,1; ...
3,2; ...
2,1; ...
2,1; ...
1,1];
[xyUnique, ignore, ixs] = unique(xy,'rows')
結果として生じます
xyUnique =
1 1
2 1
3 2
次に、関数を使用します ヒスト
[nRows, nCols] = size(xyUnique)
xyCount = hist(ixs,nRows)
その結果
xyCount =
2 4 1
Xycountの各値は、Xyuniqueの各行の発生数です。
使用 scatter
フォームのコマンド:
scatter(X,Y,S)
S.の適切なベクトルを設定するために、座標が繰り返される回数を判断する必要があります。
説明:
散布(x、y、s)は、指定されたサイズのマーカーを単色で描画します。このタイプのグラフは、バブルプロットとしても知られています。
s各マーカーの面積を決定します(ポイント^2で指定)。 Sは、xおよびyまたはスカラーと同じ長さのベクトルになります。 Sがスカラーの場合、Matlabはすべてのマーカーを同じサイズに描画します。 Sが空の場合、デフォルトのサイズが使用されます。
詳細については、参照してください ドキュメンテーション.