IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Téléchargez Discussion :

Graphique de type Radar (toile d'araignée)


Sujet :

Téléchargez

  1. #1
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut 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).

    Voir ce message pour les explications sur l'utilisation de cette contribution

    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.

    Télécharger l'ensemble des sources décrites dans cette discussion : Graphique de type Radar (toile d'araignée)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    très joli,

    marche super chez moi .
    AlloSchool, votre école sur internet.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut changer les échelles
    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

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    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 - Visualiser dans une fenêtre à part
    [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 - Visualiser dans une fenêtre à part
    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
    Images attachées Images attachées   
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    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

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    Citation Envoyé par kariboubou Voir le message
    comment faire pour modifier le type de ligne (-,--, pour les data 'PP'?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    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 - Visualiser dans une fenêtre à part
    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.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    OK, je comprends mieux.

    Pour différencier les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    legend(p(2:end), legende)
    En supposant que legende soit un tableau de cellules contenant les textes correspondant à chaque ligne de P
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 57
    Points : 33
    Points
    33
    Par défaut
    Super!!
    Merci beaucoup pour ton aide!
    Bonne journée à toi.

    Kariboubou

  10. #10
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Merci Dut, c'est une super contribution, intuitive et facile à utiliser !

    Y a-t-il une option pour remplir les zones délimitées par les courbes ?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    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 - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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…
    Images attachées Images attachées  
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Dernière petite question... J'utilise en ce moment le radar plot pour représenter des grandeurs dont la valeur n'a pas vraiment d'importance en tant que telle. Ce qui est plus intéressant c'est de comparer ces valeurs les unes aux autres. Tout ça pour dire qu'il n'est pas très intéressant pour moi d'utiliser les textes à l'intérieur du graphique pour spécifier précisément leur valeur mais que je préférerais utiliser des "tick" le long des axes pour simplifier la lecture. Est-ce qu'il est possible d'ajouter ces ticks le long des lignes qui émergement du centre ?

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 160
    Points
    53 160
    Par défaut
    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 - Visualiser dans une fenêtre à part
    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.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. mettre un graphique type Radar dans une page JSP
    Par dawaman dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 16/02/2011, 10h01
  2. Réponses: 0
    Dernier message: 02/09/2008, 13h47
  3. Graphique en toile d'araigné
    Par m_abidallah dans le forum MATLAB
    Réponses: 6
    Dernier message: 11/02/2008, 20h52
  4. Création d'un graphique type radar
    Par Stargate SG1 dans le forum IHM
    Réponses: 2
    Dernier message: 29/11/2007, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo