Comment visualiser la masortingce de corrélation en tant que schéma dans Matlab

J’ai 42 variables et j’ai calculé la masortingce de corrélation pour eux dans Matlab. Maintenant, je voudrais le visualiser avec un schéma. Quelqu’un at-il des suggestions / expériences sur la façon dont cela pourrait être fait dans Matlab? Les images suivantes expliqueront mieux mon propos:

SCHEMABALL

entrer la description de l'image ici

Dans les images, chaque parabole entre variables signifierait la force de la corrélation entre elles. Plus la ligne est épaisse, plus la corrélation est grande. 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.

Kinda terminé, je suppose que 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, de même que la taille des étiquettes et les angles auxquels les étiquettes sont tracées, de sorte que vous pouvez obtenir de la fantaisie si vous le souhaitez et ne pas les répartir uniformément le long du périmètre. grouper quelques / …

Si vous souhaitez réellement imprimer ces graphiques ou les utiliser en dehors de matlab, je suggère d’utiliser des formats vectoriels (par exemple, eps). Il est également gênant que le texte soit redimensionné lorsque vous effectuez un zoom avant / arrière, mais je ne connais aucun moyen de résoudre ce problème sans pirater la fonction de zoom: /

 schemaball % demo 

entrer la description de l'image ici

 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))) 

entrer la description de l'image ici

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

entrer la description de l'image ici

J’ai fini et soumis ma version au FEX: schemaball et mettrai à jour le lien dès que possible.

Il y a quelques différences avec la consortingbution de Gunther Struyf :

  1. Vous pouvez renvoyer les poignées à l’object 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’ajuster aux étiquettes, laissant les axes inchangés
  4. La syntaxe ne nécessite que des masortingces de corrélations (mais permet des entrées facultatives)
  5. Optimisé pour la performance.

Suivez des 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 

entrer la description de l'image icientrer la description de l'image ici

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

entrer la description de l'image ici

 h = schemaball; set(hl(~isnan(hl)), 'LineWidth',1.2) set(hs, 'MarkerEdgeColor','red','LineWidth',2,'SizeData',100) set(ht, 'EdgeColor','white','LineWidth',1) 

entrer la description de l'image ici

La palette de couleurs par défaut:

entrer la description de l'image ici

Pour améliorer le rendu de l’ écran, vous pouvez lancer MATLAB avec le commutateur expérimental -hgVersion 2 qui produit désormais des graphiques anti / aliasés (source: mise à jour HG2 | Matlab non documenté ). Cependant, si vous essayez de sauvegarder la figure, le fichier aura l’ancien rendu anti-aliasing habituel, alors voici une image en écran d’impression du schéma de Gunther:

entrer la description de l'image ici

Mise à jour importante:

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

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

Voici un exemple de Matlab:

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

Ce qui donne ce genre de belles plots:

entrer la description de l'image ici

entrer la description de l'image ici

Par coïncidence, Cleve Moler (Mathématicien en chef MathWorks) a montré un exemple de ce genre de complot sur son blog le plus récent (pas aussi beau que ceux de votre exemple, et les lignes de connexion sont plutôt droites que paraboliques, mais il semble fonctionnel) ). 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 disposé à partager des choses.

Ce qui pourrait être encore plus agréable pour vous, c’est qu’il applique également (et cette fois-ci) du code pour permuter les lignes / colonnes du tableau afin de maximiser la proximité spatiale des nœuds fortement connectés, plutôt que de les ordonner de manière aléatoire. Vous vous retrouvez avec une enveloppe en forme de «croissant» de lignes de connexion, avec le gros morceau du croissant représentant les nœuds les plus fortement connectés.

Malheureusement, je pense que si vous avez besoin d’améliorer son code pour obtenir les lignes très étroites et à haute résolution dans vos exemples de graphiques, les graphiques actuellement non anti-aliasés de MATLAB ne sont pas encore à la hauteur.

J’ai récemment expérimenté les données MATLAB et la bibliothèque de visualisation D3 pour des graphes similaires – il existe plusieurs types de visualisations circulaires qui vous intéressent et beaucoup d’entre elles sont interactives. Une autre option utile, bien préparée et disponible gratuitement est Circos, qui est probablement responsable de la plupart des versions plus jolies de ces graphiques que vous avez vues dans la presse populaire.