2017-08-29 2 views
2

J'ai une matrice avec 3 colonnes. Les deux premières colonnes sont des coordonnées et la troisième est le poids ou l'intensité.Un diagramme de densité utilisant 2 colonnes de coordonnées et une colonne de poids

newmat = [ 27.37 -45.69 14.47 
      27.37 -45.68 18.58 
      27.37 -45.67 29.05 
      27.37 -45.66 51.7 
      ...  ...  ... ] 

J'ai déjà créé un nuage de points:

scatterplot

Cependant, je voudrais avoir quelque chose comme une parcelle de densité (comme la deuxième parcelle here). J'ai essayé d'utiliser la fonction hist3 comme dans here, mais je n'ai pas compris comment prendre en compte la troisième colonne - poids.

+0

Du lien vers l'image: 'out = accumArray ([IDXX, idxy], 1)' Vous remplacez que par 'out = accumArray ([IDXX, idxy], poids);' – Gelliant

+0

Merci, mais comment cela m'aide-t-il exactement? – Aviad

Répondre

0

Vous pouvez créer une matrice à partir des données dans newmat (en utilisant les fonctions sortrows, unique et accumarray) et tracer comme un image:

newmat = sortrows(newmat, [1 2]); % Sort the first two columns in ascending order 
[x, ~, newmat(:, 1)] = unique(newmat(:, 1));  % Make numeric indices for column 1 
[y, ~, newmat(:, 2)] = unique(newmat(:, 2));  % Make numeric indices for column 2 
M = accumarray(newmat(:, 1:2), newmat(:, 3)).'; % Build the matrix 
imagesc(x, y, M); 

est ici quelques exemples de données similaires à votre format:

[X, Y] = meshgrid(0:0.1:2, 3:0.1:5); 
Z = peaks(21); 
newmat = [X(:) Y(:) Z(:)]; 

Et voici l'intrigue le code ci-dessus produit de ces données:

enter image description here

+0

Merci beaucoup. C'était très utile! – Aviad