0

MATLABでプロットしたいデータがいくつかあります。データは、必要なポイントのx座標とy座標で構成されています。現在、これらの点をプロットするためにプロット関数を使用しています。

データには、同じ座標を持つ多くのポイントがあります。さて、私が欲しいのは、同じ座標を持つポイントが単一のドットとしてプロットされるのではなく、より太いドットとしてプロットされることです。

たとえば、ポイントが

1,1

2,1

2,1

3,2

2,1

2,1

1,1

次に、プロットには3,2に単一のドットがありますが、1,1に太いドットがあり、2,1にさらに太いドットがあります。

誰かがこれを行う方法を教えてもらえますか?

4

3 に答える 3

3

これを行うには、少しの創造性と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 
于 2011-12-07T05:22:38.800 に答える
1

前の例に基づいてループを回避するには、次のことを試してください。

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

次に、関数histを使用します

[nRows, nCols] = size(xyUnique)
xyCount = hist(ixs,nRows)

その結果

xyCount =
     2     4     1

xyCountの各値は、xyUniqueの各行の出現回数です。

于 2014-07-30T19:11:49.330 に答える
0

scatter次の形式のコマンドを使用します。

scatter(X,Y,S)

Sの正しいベクトルを設定するには、座標が繰り返される回数を決定する必要があります。

説明:

scatter(X、Y、S)は、指定されたサイズ(S)のマーカーを単色で描画します。このタイプのグラフは、バブルプロットとも呼ばれます。

Sは、各マーカーの面積を決定します(points ^ 2で指定)。Sは、XおよびYと同じ長さのベクトル、またはスカラーにすることができます。Sがスカラーの場合、MATLABはすべてのマーカーを同じサイズで描画します。Sが空の場合、デフォルトのサイズが使用されます。

詳細については、ドキュメントを参照してください。

于 2011-12-07T05:03:16.337 に答える