質問

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が空の場合、デフォルトのサイズが使用されます。

詳細については、参照してください ドキュメンテーション.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top