Domanda

Ho alcuni dati che voglio tracciare in Matlab. I dati sono costituiti da coordinate X e Y dei punti che desidero. Al momento, sto usando la funzione della trama per tracciare questi punti.

I dati hanno molti punti con le stesse coordinate. Ora, quello che voglio è che i punti con le stesse coordinate non tracciano un singolo punto, ma un punto più spesso.

Ad esempio, supponiamo che i punti siano

1,1

2,1

2,1

3,2

2,1

2,1

1,1

Quindi, la trama dovrebbe avere un singolo punto a 3,2, ma un punto più spesso a 1,1 e persino un punto più spesso a 2,1

Qualcuno può dirmi come farlo?

È stato utile?

Soluzione

Puoi usare un po 'di creatività e il scatter funzione per farlo.

Innanzitutto, è necessario ridurre i dati a un elenco di punti, oltre a un conteggio del numero di punti in ogni posizione.

Ad esempio, se hai alcuni dati:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

Ottieni i punti unici e gli indici univoci:

[xyUnique, ignore, ixs] = unique(xy,'rows')

Questo è piuttosto doloroso, ma possiamo contare il numero di occorrenze di ogni riga unica usando il ixs Vector (probabilmente c'è un modo migliore).

counts = zeros(size(xyUnique,1),1);
for ix = 1:size(counts,1);
    counts(ix) = sum(ixs == ix);
end

Ora usa Scatter per creare una trama come vuoi

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 

Altri suggerimenti

Per evitare looping, costruendo l'esempio precedente, prova questo:

xy = [...
    1,1; ...
    2,1; ...
    2,1; ...
    3,2; ...
    2,1; ...
    2,1; ...
    1,1];

[xyUnique, ignore, ixs] = unique(xy,'rows')

Provocherà

xyUnique =
     1     1
     2     1
     3     2

Successivamente, utilizziamo la funzione Hist

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

Che si traduce

xyCount =
     2     4     1

Ogni valore di XyCount è il numero di occorrenze di ogni riga di Xyunique.

Utilizzare il scatter comando del modulo:

scatter(X,Y,S)

Dovrai determinare quante volte le coordinate vengono ripetute per impostare il vettore giusto per S.

Descrizione:

Scatter (X, Y, S) disegna i marcatori alle dimensioni specificate con un singolo colore. Questo tipo di grafico è anche noto come un diagramma a bolle.

S determina l'area di ciascun marcatore (specificato nei punti^2). S può essere un vettore della stessa lunghezza di x e y o uno scalare. Se S è uno scalare, Matlab disegna tutti i marcatori della stessa dimensione. Se S è vuoto, viene utilizzata la dimensione predefinita.

Per ulteriori informazioni, vedere documentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top