Comment visualiser la matrice de corrélation comme un schemaball dans Matlab

j'ai 42 variables et j'ai calculé la matrice de corrélation pour eux dans Matlab. Maintenant je voudrais le visualiser avec un schemaball. Quelqu'un a-t-il des suggestions ou des expériences sur la façon de le faire à Matlab? Les photos ci-dessous va vous expliquer mon point de plus:

SCHEMABALL

enter image description here

les photos de chaque parabole entre les variables signifierait la force de la corrélation entre eux. L'épaisseur de la ligne, la plus de corrélation. Je préfère le style de l'image 1 plus que le style de l'image 2 où j'ai utilisé différentes couleurs pour mettre en évidence la force de la corrélation.

41
demandé sur Amro 2013-06-11 11:10:12

5 réponses

un peu fini je suppose.. le code peut être trouvé ici à github. La Documentation est incluse dans le fichier.

la couleur jaune/magenta (pour la corrélation positive/négative) est configurable, ainsi que la fontsize des étiquettes et les angles auxquels les étiquettes sont tracées, de sorte que vous pouvez obtenir Fantaisie si vous voulez et ne pas les distribuer uniformément le long du périmètre/groupe certains/...

si vous voulez réellement imprimer ces graphiques ou les utiliser en dehors de matlab, je suggérez d'utiliser des formats vectoriels (par exemple eps). C'est aussi ennuyeux que le texte se redimensionne quand vous zoomez sur/out, mais je ne sais pas comment le corriger sans Hacker la fonction zoom :/

schemaball % demo

enter image description here

schemaball(arrayfun(@num2str,1:10,'uni',false), rand(10).^8,11,[0.1587 0.8750],[0.8333 1],2*pi*sin(linspace(0,pi/2-pi/20,10)))

enter image description here

schemaball(arrayfun(@num2str,1:50,'uni',false), rand(50).^50,9)

enter image description here

24
répondu Gunther Struyf 2013-06-12 19:43:27

j'ai terminé et soumis ma version FEX: schemaball et mettre à jour le lien dès que possible.

Il y a quelques différences avec Gunther Struyfcontribution:

  1. vous pouvez retourner les poignées à l'objet graphique pour une personnalisation manuelle complète
  2. les étiquettes sont orientées pour permettre une lisibilité maximale de gauche à droite
  3. la figure s'étire pour s'adapter aux étiquettes, laissant les axes inchangé
  4. la Syntaxe exige seulement de la matrice des corrélations (facultatif mais permet d'entrées)
  5. optimisé pour la performance.

Suivre exemples de démo, d'étiquettes personnalisées et de personnalisation créative. Remarque: le premier chiffre a été exporté avec saveas(), tous les autres avec export_fig.

schemaball

enter image description hereenter image description here

x      = rand(10).^3;
x(:,3) = 1.3*mean(x,2);
schemaball(x, {'Hi','how','is','your','day?', 'Do','you','like','schemaballs?','NO!!'})

enter image description here

h = schemaball;
set(h.l(~isnan(h.l)), 'LineWidth',1.2)
set(h.s, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100)
set(h.t, 'EdgeColor','white','LineWidth',1)

enter image description here

La palette par défaut:

enter image description here

améliorer sur l'écran Rendu vous pouvez lancer MATLAB avec le -hgVersion 2 switch, qui produit des anti/alias graphiques par défaut maintenant (source: mise à jour HG2 | non documentée Matlab). Cependant, si vous essayez de sauver la figure, le fichier aura le rendu anti-aliasé habituel, alors voici une image d'écran d'impression du schemaball de Gunther:

enter image description here

24
répondu Oleg 2017-05-23 12:25:57

mise à jour Importante:

vous pouvez le faire dans Matlab maintenant avec la soumission FileExchange:

http://www.mathworks.com/matlabcentral/fileexchange/48576-circulargraph

Il y a une exmample par Matlab ici:

http://uk.mathworks.com/examples/matlab/3859-circular-graph-examples

ce Qui donne ce genre de belle parcelles:

enter image description here

enter image description here

5
répondu Ander Biguri 2014-12-11 16:18:07

par coïncidence, Cleve Moler (mathématicien en chef de MathWorks) a montré un exemple de ce genre d'intrigue sur son plus récent blog (pas aussi belles que celles de votre exemple, et les lignes de connexion sont droites plutôt que paraboliques, mais elles semblent fonctionnelles). Malheureusement, il n'a pas inclus le code directement, mais si vous lui laissez un commentaire sur le post il est généralement très prêt à partager des choses.

ce qui pourrait être encore mieux pour vous est qu'il applique également (et ce temps inclut) le code pour permuter les lignes/colonnes du tableau afin de maximiser la proximité spatiale des noeuds fortement connectés, plutôt que de les ordonner au hasard autour de la circonférence. On finit avec une enveloppe en forme de croissant de lignes de connexion, avec la partie épaisse du Croissant représentant les noeuds les plus fortement connectés.

malheureusement, je soupçonne que si vous avez besoin d'améliorer son code pour obtenir les lignes très étroites, haute résolution en les graphiques Non-anti-aliasés de MATLAB ne sont pas encore tout à fait à la hauteur.

3
répondu Sam Roberts 2013-06-11 09:43:16

j'ai récemment expérimenté avec les données de MATLAB et le D3 bibliothèque de visualisation pour des graphiques similaires - il existe plusieurs types de visualisations circulaires connexes qui peuvent vous intéresser et beaucoup d'entre elles sont interactives. Une autre option utile, bien cuit, et librement disponible est Circos qui est probablement responsable de la plupart des plus belles versions de ces graphiques que vous avez vu dans la presse populaire.

2
répondu MSommer 2013-06-24 19:59:15