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

MATLAB Discussion :

Représentation de séries temporelles en bâton


Sujet :

MATLAB

  1. #1
    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 Représentation de séries temporelles en bâton
    Salut,

    Je suis un peu une tanche pour tout ce qui touche aux graphiques...

    Je voudrais représenter des séries temporelles en bâton à l'aide de plusieurs couleurs. Par exemple, pour une année, j'ai gagné de l'argent tous les mois, mais en juin j'en ai perdu. Je voudrais donc un bâton qui soit bleu toute l'année sauf en juin où il serait rouge. Et pouvoir en second lieu en superposer plusieurs sur un même graphique comme un peu un diagramme de type barh mais avec des barres toutes de même longueur avec des segments de barres avec des couleurs qui varient.

    J'espère que mes explications ne sont pas trop brouillons.

    Merci à vous.

  2. #2
    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 165
    Points
    53 165
    Par défaut
    Une idée :

    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
    y = rand(3,12)*500-250;
     
    s = sign(y);
     
    figure(1)
    h = barh(abs(s),'stacked');
     
    for n = 1:numel(h) 
        hh = get(h(n),'children');
        set(hh,'facevertexcdata',-s(:,n))
    end
     
    set(gca,'xtick',.5:11.5, ...
        'xticklabel',{'Jan' 'Feb' 'Mar' 'Apr' 'May'...
        'Jun' 'Jul' 'Aug' 'Sep' 'Oct' 'Nov' 'Dec'})
    xlabel('2012');
    axis tight
    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)

  3. #3
    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
    Excellent ! C'est exactement ça que j'avais en tête. Merci beaucoup !

  4. #4
    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
    Hehe ! Petit soucis, lorsque l'on utilise des séries de données plus longues, il y a des problèmes d'affichage. En réalité je voudrais utiliser ce graphique pour représenter rapidement la fragmentation de séries de données. Il y a des jours où j'ai des données manquantes mais elles sont réparties en petits groupes.

    Bref, j'ai non pas des matrices qui font 3*12 mais 49*15147 et matlab n'en veut pas. Pas de représentation lorsque la matrice excède n*80

    (et oui, il faut que je me mette aux handles un peu plus sérieusement)

    Merci !

  5. #5
    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 165
    Points
    53 165
    Par défaut
    15147... rien que ça.

    Admettons

    Si on représente chaque valeur par un rectangle de 1 pixel de largeur, il faudra un écran avec une résolution de 15147 pixels en horizontal
    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)

  6. #6
    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
    Vu comme ça...

    Bon après, les données manquantes sont très souvent à la suite les unes des autres et forment des petits paquets. Donc pas possibilité de représenter les chroniques sous cette forme ? Même si elles ne sont visible qu'avec un zoom effectué de façon manuelle par l'utilisateur ?

  7. #7
    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 165
    Points
    53 165
    Par défaut
    Voici la version corrigée du premier code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    y = rand(9,100)*500-250;
     
    s = sign(y);
     
    figure(1)
    h = barh(abs(s),'stacked');
     
    for n = 1:numel(h) 
        hh = get(h(n),'children');
        fvcd = repmat(s(:,n),5,1);
        fvcd(end+1) = fvcd(end);
        set(hh,'facevertexcdata',fvcd)
    end
    J'essaie de te faire une version plus optimisé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)

  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 165
    Points
    53 165
    Par défaut
    Voici une version plus légère :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    clc
    clear all
    y = rand(9,100)*500-250;
     
    s = sign(y);
     
    figure(1)
    clf
    hold on
     
    for m = 1:size(y,1)
     
        v = [1 m-.4 ; size(y,2)+1 m-.4 ; size(y,2)+1 m+.4 ; 1 m+.4];
        patch('vertices',v,'faces',[1 2 3 4],'facecolor','b');
     
        n = 1;
        k = 0;
        while n<=size(y,2)
     
            if s(m,n)==-1
                idx = n;
                k = k+1;
     
                n = n+1;
                if n>size(y,2)
                    break;
                end
                while s(m,n)==-1
                    k = k+1;
                    n = n+1;
                    if n>size(y,2)
                        break;
                    end
                end
     
                v = [idx m-.4 ; idx+k m-.4 ; idx+k m+.4 ; idx m+.4];
                patch('vertices',v,'faces',[1 2 3 4],'facecolor','r','edgecolor','r');
     
                idx = [];
                k = 0;
     
            else
                n = n+1;
            end
        end
     
     
    end
     
    set(gca,'ytick',1:size(y,1));
     
    axis tight
    On ne trace qu'une seule barre bleue par ligne de y sur toute la longueur.
    Puis on superpose les quelques barres rouges.

    Il y a moins d'objets à tracer, l'affichage devrait donc être plus réactif.

    Par contre, je n'ai pas optimisé le calcl des zones en rouge.

    A toi de voir selon ton besoin
    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)

  9. #9
    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 165
    Points
    53 165
    Par défaut
    Une autre alternative plus simple consiste à tracer le graphique sous la forme d'une image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    y = rand(9,100)*500-250;
     
    s = sign(y);
     
    imagesc(s);
    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)

  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
    Dernière solution d'une facilité... déconcertante ! C'est moins beau, mais c'est plus simple et plus léger.

    Mais j'ai déjà d'autres applications dans un coin de ma tête pour un code comme celui que tu as optimisé (pas bête de tracer une barre bleue puis de superposer les carrés rouges)

    Merci beaucoup, ça, c'est pas de l'aide bâclée ! => grand risques de me revoir sur le forum !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. séries temporelles - ARIMA
    Par mathieu_r dans le forum R
    Réponses: 5
    Dernier message: 21/04/2011, 16h23
  2. Réponses: 2
    Dernier message: 30/03/2010, 16h27
  3. Requète sur séries temporelles
    Par Christian78 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/09/2008, 07h51
  4. Séries temporelles Arma et Farima
    Par sam13 dans le forum MATLAB
    Réponses: 1
    Dernier message: 31/01/2007, 19h19
  5. [JFreeChart] Séries temporelles
    Par habasque dans le forum 2D
    Réponses: 1
    Dernier message: 10/12/2006, 14h59

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