Téléchargé 4 fois
Vote des utilisateurs
2
0
Détails
Licence : BSD
Mise en ligne le 27 juin 2014
Plate-formes :
Linux, Mac, Windows
Langue : Français
Référencé dans
Navigation
Graphique de type Radar (toile d'araignée)
Graphique de type Radar (toile d'araignée)
Voici un code MATLAB qui permet d'obtenir une représentation graphique de données de type radar (comme avec Excel)
Vous pouvez utiliser librement ce code dans vos travaux (voir le fichier licence.txt).
Je serais néanmoins curieux de savoir comment vous l'utilisez.
N'hésitez pas à me contacter et à me faire parvenir une capture de vos graphiques.
Merci
Vous pouvez utiliser librement ce code dans vos travaux (voir le fichier licence.txt).
Je serais néanmoins curieux de savoir comment vous l'utilisez.
N'hésitez pas à me contacter et à me faire parvenir une capture de vos graphiques.
Merci
Ajoute ceci à la fin du code :
Je dois publier prochainement une version revue et corrigée de cette contribution, avec beaucoup plus de possibilité pour personnaliser le graphique.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [numRadii, numCurves] = size(P); gridsOptions.number = 10; ticksize = 3; radius = 100; th = linspace(0, 2*pi, numRadii+1); x = NaN(numRadii*2+(numRadii-1), gridsOptions.number+1); y = NaN(numRadii*2+(numRadii-1), gridsOptions.number+1); x(1,:) = ticksize/2; x(2,:) = -ticksize/2; y(1,:) = radius * linspace(1, 0, gridsOptions.number+1); y(2,:) = radius * linspace(1, 0, gridsOptions.number+1); for n = 2:numel(th)-1 tmp = [cos(th(n)) sin(th(n)) ; -sin(th(n)) cos(th(n))]*[x(1,:) ; y(1,:)]; x(3*(n-1)+1,:) = tmp(1,:); y(3*(n-1)+1,:) = tmp(2,:); tmp = [cos(th(n)) sin(th(n)) ; -sin(th(n)) cos(th(n))]*[x(2,:) ; y(2,:)]; x(3*(n-1)+2,:) = tmp(1,:); y(3*(n-1)+2,:) = tmp(2,:); end line(x(:,1:end-1), y(:,1:end-1), 'color', 'k') |
Ce sont des objets Patch
En reprenant l'exemple de la demo n°2 :
On peut aussi ajouter de la transparence comme ceci :
A adapter selon les gouts et les besoins…
En reprenant l'exemple de la demo n°2 :
Code : | Sélectionner tout |
1 2 3 4 5 | [p,h,t] = radar(P,L,color,str,bg); for n = 2:numel(p) set(p(n), 'facecolor', get(p(n), 'edgecolor')) end |
Code : | Sélectionner tout |
1 2 3 | for n = 2:numel(p) set(p(n), 'facecolor', get(p(n), 'edgecolor'), 'facealpha', 0.75) end |
très joli,
marche super chez moi .
marche super chez moi .
Bonjour,
Serait-il possible de modifier le code du diagramme radar pour avoir la liberté d'échelle sur les différents axes?
Je recherche un outil qui me permettrait de faire un diagramme radar avec des échelles différentes sur les axes du type :
http://www.minefi.gouv.fr/directions...france0612.jpg
Merci
Serait-il possible de modifier le code du diagramme radar pour avoir la liberté d'échelle sur les différents axes?
Je recherche un outil qui me permettrait de faire un diagramme radar avec des échelles différentes sur les axes du type :
http://www.minefi.gouv.fr/directions...france0612.jpg
Merci
La matrice L sert à appliquer les échelles sur les différentes directions radiales. La première colonne de L donne pour chaque direction la valeur au centre du graphique et la seconde colonne donne la valeur à la périphérie du graphique. Si la première valeur est inférieure à la seconde, les valeurs décroissent quand le rayon augmente.
La fonction renvoie les identifiants des objets graphiques pour pouvoir améliorer le rendu du tracé :
Les positions des textes à l'intérieur du graphique ne sont pas optimales, je dois bien l'avouer
Deux demo :
(voir ci-dessous les deux graphiques obtenus)
Voilou... n'hésitez pas à donner vos remarques à propos de ce nouveau code
La fonction renvoie les identifiants des objets graphiques pour pouvoir améliorer le rendu du tracé :
Code : | Sélectionner tout |
[h_patch,h_line,h_text] = radar(P,L,col,str,bg,ax)
- h_patch(1) : fond du graphique
- h_patch(2:end) : les courbes
- h_line : les directions radiales
- h_text{1:end-1} : les labels (en %)
- h_text{end} : les étiquettes en périphérie du graphique
Les positions des textes à l'intérieur du graphique ne sont pas optimales, je dois bien l'avouer
Deux demo :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | function demo_radar % DEMO 1 P = [30 18 23 52 69 ; 20 45 38 85 34].'; L = [0 0 0 0 0 ; 100 100 100 100 100].'; color = [1 0 0 ; 0 0 1]; str = {'Perf' 'Rapidité' 'Communauté' 'Simplicité' 'Portabilité'}; bg = 'tight'; figure('numbertitle','off','name','Radar Demo 1') ax = axes; radar(P,L,color,str,bg,ax); % DEMO 2 P = [2.3 8.8 2.7 5.9 0.1 2.7 2.9 ; 1.2 9.8 1.8 4.7 7.5 1.4 3.7].'; L = [-1.5 12 0 0 -4 -1.5 5 ; 3 4 3 10 12 3 0].'; color = [0 0.7059 0.9451 ; 0 0 1]; str = {'CR' 'EM' 'CO' 'IN' 'EX' 'PA' 'FP'}; bg = 'circle'; figure('color','w','numbertitle','off','name','Radar Demo 2') [p,h,t] = radar(P,L,color,str,bg); set(p(1),'edgecolor','none','facecolor',[1 0.9686 0.9216]) set(p(2:3),'linewidth',3) set([t{1:2}],'fontsize',8) legend(p(2:3),{'2006' '2005'}) |
Voilou... n'hésitez pas à donner vos remarques à propos de ce nouveau code
Bonjour,
tout d'abord un grand merci pour ce code qui correspond exactement à mes besoins!
J'aimerais savoir comment faire pour modifier le type de ligne (-,--, pour les data 'PP'? De même, comment faire pour ajouter une légende pour chaque colonne de 'PP'?
Merci d'avance
Kariboubou
tout d'abord un grand merci pour ce code qui correspond exactement à mes besoins!
J'aimerais savoir comment faire pour modifier le type de ligne (-,--, pour les data 'PP'? De même, comment faire pour ajouter une légende pour chaque colonne de 'PP'?
Merci d'avance
Kariboubou
Code : | Sélectionner tout |
1 2 | [p,h,t] = radar(P,L,color,str,bg); set(p(2:3),'linestyle',':') |
Je ne vois pas bien l'intérêt de créer une légende pour les colonnes ?
Pourrais-tu me montrer un exemple de ce que tu cherches à obtenir ?
Je ne vois pas bien l'intérêt de créer une légende pour les colonnes ?
Code : | Sélectionner tout |
legend(PP(1:x),legende(1:x))
Merci d'avance.
OK, je comprends mieux.
Pour différencier les lignes :
Comme il n'y a que quelques styles disponibles, il y aura des lignes avec des styles similaires.
Pour la légende :
En supposant que legende soit un tableau de cellules contenant les textes correspondant à chaque ligne de P
Pour différencier les lignes :
Code : | Sélectionner tout |
1 2 3 4 5 | style = {'-' '--' ':' '-.'}; for n = 1:numel(p)-1 set(p(n+1), 'linestyle', style{rem(n,4)+1}); end |
Pour la légende :
Code : | Sélectionner tout |
legend(p(2:end), legende)
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.