MATLAB: trama più punti con le stesse coordinate
-
29-10-2019 - |
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?
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.