IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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)

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
Avatar de Jerome Briot
Rédacteur/Modérateur https://www.developpez.com
Le 03/05/2015 à 9:07
Citation Envoyé par thecrazydonut Voir le message
Est-ce qu'il est possible d'ajouter ces ticks le long des lignes qui émergement du centre ?
Ajoute ceci à la fin du code :

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')
Je dois publier prochainement une version revue et corrigée de cette contribution, avec beaucoup plus de possibilité pour personnaliser le graphique.
Avatar de Jerome Briot
Rédacteur/Modérateur https://www.developpez.com
Le 23/04/2015 à 22:05
Citation Envoyé par thecrazydonut Voir le message
Y a-t-il une option pour remplir les zones délimitées par les courbes ?
Ce sont des objets Patch

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
On peut aussi ajouter de la transparence comme ceci :

Code : Sélectionner tout
1
2
3
for n = 2:numel(p)
   set(p(n), 'facecolor', get(p(n), 'edgecolor'), 'facealpha', 0.75) 
end
A adapter selon les gouts et les besoins…
Avatar de mr_samurai
Membre éprouvé https://www.developpez.com
Le 17/03/2008 à 18:28
très joli,

marche super chez moi .
Avatar de agilles
Nouveau Candidat au Club https://www.developpez.com
Le 31/01/2011 à 19:26
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
Avatar de Jerome Briot
Rédacteur/Modérateur https://www.developpez.com
Le 02/02/2011 à 22:52
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é :
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'})
(voir ci-dessous les deux graphiques obtenus)

Voilou... n'hésitez pas à donner vos remarques à propos de ce nouveau code
Avatar de kariboubou
Nouveau membre du Club https://www.developpez.com
Le 04/03/2014 à 10:44
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
Avatar de Jerome Briot
Rédacteur/Modérateur https://www.developpez.com
Le 04/03/2014 à 11:04
Citation Envoyé par kariboubou Voir le message
comment faire pour modifier le type de ligne (-,--, pour les data 'PP'?
Code : Sélectionner tout
1
2
[p,h,t] = radar(P,L,color,str,bg);
set(p(2:3),'linestyle',':')
Citation Envoyé par kariboubou Voir le message
De même, comment faire pour ajouter une légende pour chaque colonne de 'PP'?
La légende est attribuée pour chaque ligne des données d'entrée (voir la démo)
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 ?
Avatar de kariboubou
Nouveau membre du Club https://www.developpez.com
Le 04/03/2014 à 11:31
Je ne vois pas bien l'intérêt de créer une légende pour les colonnes ?
Merci pour cette réponse rapide. Je me suis trompé, ce que je souhaite c'est de mettre la légende correspondante à chaque ligne de P, en sachant que ce nombre de lignes peut varier. Comment faire quelque chose du style:
Code : Sélectionner tout
legend(PP(1:x),legende(1:x))
Idem pour le style des lignes, le nombre de ligne dans PP peut varier donc je souhaiterais attribuer un style différent par ligne, de la même façon que j'attribue une couleur différente de façon aléatoire. L'idée est de distinguer 2 courbes qui viendraient se superposer...

Merci d'avance.
Avatar de Jerome Briot
Rédacteur/Modérateur https://www.developpez.com
Le 04/03/2014 à 11:43
OK, je comprends mieux.

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
Comme il n'y a que quelques styles disponibles, il y aura des lignes avec des styles similaires.

Pour la légende :

Code : Sélectionner tout
legend(p(2:end), legende)
En supposant que legende soit un tableau de cellules contenant les textes correspondant à chaque ligne de P
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.