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

Composants VCL Delphi Discussion :

[TChart] Histogramme et échelle automatique


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut [TChart] Histogramme et échelle automatique
    Bonjour,

    Je travaille avec C++ Builder mais d'après plusieurs post, le TChart est exactement le même sous delphi alors je vais poser ma question ici puisque les sources en ce domaine y sont plus nombreuses.

    J'ai un TChart donc que je rempli à l'aide d'une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tmpSql = "select distinct Sortie, count(*) as nb from film group by Sortie";
    Cette requete regarde dans une table (de films) et classes les films en fonction de leur année de sortie et compte le nombre de films par catégorie.
    L'objectif est donc d'afficher des stat sur les films en fonction de leur année de sortie.

    Seulement voilà, la diversité des films fait que l'échelle n'est pas très adaptée :


    Comme vous pouvez le constater, c tout centralisé au milieu. Je voudrais pouvoir repartir un peu tout ça ...
    je pense que si je pouvais choisir moi même l'echelle ça serait pas mal mais j'ai aucune idée et en plus si je désactive l'echelle auto, il affiche plus rien !
    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
     
    HorizSerie = new TBarSeries(ChartStatCategorie);
       HorizSerie->MultiBar = mbSide;
     
       HorizSerie->BarWidthPercent = 8;
       HorizSerie->Marks->Style = smsValue;
       ChartStatCategorie->BottomAxis->Automatic = true;
     
       while (!StatQuery->Eof)
       {
       	NomCat = StatQuery->FieldByName(Champ)->AsString;
          NbRecord = StatQuery->FieldByName("nb")->AsInteger;
          HorizSerie->AddXY(NbRecord,coordY,NomCat,clBlue);
          coordY+=5;
          StatQuery->Next();
       }
       ChartStatCategorie->AddSeries(HorizSerie);
       ChartStatCategorie->Refresh();
    merci par avance pour votre aide
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut Re: TChart Histogramme et echelle auto
    Citation Envoyé par Dinytro
    je pense que si je pouvais choisir moi même l'echelle ça serait pas mal mais j'ai aucune idée et en plus si je désactive l'echelle auto, il affiche plus rien !
    Tu as bien spécifié les valeurs min et max de l'axe ? A priori, c'est tout ce qu'il y a à faire.

  3. #3
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    oui,je l'ai fait mais quand je met min à 1900 et max à 2005 il me dit quil faut que Min soit inverieur ou egal à Max .... et si je ne m'abuse c'est bien le cas !!
    Donc, je ne sais pas ...
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Je viens de faire quelques essais et je crois comprendre ce qu'il se passe :
    Lorsque tu affecte la valeur Min ou Max il faut faire attention aux valeurs courantes. Si tu le fais avant de créer les séries, Min et Max doivent valoir 0. Dans ce cas précis, donner la valeur 1900 au Min provoque une erreur car Min > Max (1900 > 0). Il te faut donc commencer par la valeur Max et ça devrait fonctionner sans soucis.

  5. #5
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    effectivement, ça fonctionne mieux... Seulement en fait, ça ne fait pas vraiment ce que je veux :
    En fait, je voudrais que ce soit les libellé qui soit classés et pas les valeurs mais on ne peux pas mettre de Chaine dans les maxi et mini.

    En fait, quand j'écris ceci :

    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
     
    HorizSerie = new TBarSeries(ChartStatCategorie);
       HorizSerie->MultiBar = mbSide;
     
       HorizSerie->BarWidthPercent = 8;
       HorizSerie->Marks->Style = smsValue;
       ChartStatCategorie->BottomAxis->Automatic = false;
       ChartStatCategorie->BottomAxis->Maximum = 2005;
       ChartStatCategorie->BottomAxis->Minimum = 1940;
     
       while (!StatQuery->Eof)
       {
       	NomCat = StatQuery->FieldByName(Champ)->AsString;
          NbRecord = StatQuery->FieldByName("nb")->AsInteger;
          HorizSerie->AddXY(NbRecord,coordY,NomCat,clBlue);
          coordY+=5;
          StatQuery->Next();
       }
     
       ChartStatCategorie->AddSeries(HorizSerie);
       ChartStatCategorie->Refresh();
    Et bien, rien ne s'affiche :

    et je pense que c'est normal puisque que le type d'echelle n'est pas le même : j'affiche des label et je défini les echelles avec des entiers ....
    Par contre, la légende indique bien que les données sont corrects

    Je sais pas trop comment faire.....
    je sais plus si c'est possible de convertir des chaines en entiers en SQL ...mais c'est un autre forum...
    Si vous avez une idée sur mon problème, je suis preneur :-)
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  6. #6
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    ça y j'y suis arrivé mais j'ai un autre problème :

    je remet le 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
     
    HorizSerie = new TBarSeries(ChartStatCategorie);
       HorizSerie->MultiBar = mbSide;
     
       HorizSerie->BarWidthPercent = 8;
       HorizSerie->Marks->Style = smsValue;
       ChartStatCategorie->BottomAxis->Automatic = false;
       ChartStatCategorie->BottomAxis->Maximum = 2005;
       ChartStatCategorie->BottomAxis->Minimum = 1940;
       int valNomCat;
       while (!StatQuery->Eof)
       {
       	NomCat = StatQuery->FieldByName(Champ)->AsString;
     
          valNomCat = StatQuery->FieldByName(Champ)->AsInteger;
          NbRecord = StatQuery->FieldByName("nb")->AsInteger;
          HorizSerie->AddXY(valNomCat,NbRecord,NomCat,clTeeColor);
          coordY+=5;
          StatQuery->Next();
       }
    et le résultat :



    comment pui je faire pour mettre le 1940 au début de l'axe ?
    Start position ne sert pas à cela et en plus il fonctionne en pourcentage et j'ai rien trouvé d'autre ...
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/07/2014, 13h09
  2. Mise à l'échelle automatique, centrage et superposition d'images
    Par bagory dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 05/05/2011, 23h00
  3. Réponses: 1
    Dernier message: 03/02/2010, 09h05
  4. Affichage d'un TChart (graphique) en échelle logarithmique
    Par stillman dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/04/2007, 17h25
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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