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

2D Java Discussion :

[JFreeChart]Graphique line et bar avec couleur differente


Sujet :

2D Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut [JFreeChart]Graphique line et bar avec couleur differente
    Bonjour à tous,

    j'aimerai creer un graphique contenant des bars et une line :
    dans les bars j'ai deux couleurs differentes oranges et bleu
    la ligne est fait mon objectif en rouge

    ma question est que je ne comprend rien au dataset, series ...

    est-il utilise d'avoir d'avoir un deux dataset un pour la ligne et un pour le bar, comment rendre la superposition possible ?
    comment est-il possible de changé de couleur dans sur une ou plusieur bar ?

    au finale j'ai :

    Ici bar en orange(historique); rien blanc ; ici debut de l'objectif en rouge et des bars en bleu
    Historique2005;2006;espace;Janv;Févr,Mars....;Déc

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Bonjour,

    première remarque pour te suggérer de te relire avant de poster, parce que tes questions ne sont pas très clairement exprimées (la précipitation, j'imagine ).

    Sinon, pour ta question qui est, si j'ai bien compris, comment superposer deux types de graphiques différents dans JFreeChart, je te réponds : pas de problème ! Il te suffit d'avoir deux datasets, un pour ta ligne, un pour tes bars... Ensuite, tu utilises ChartFactory.createLineChart(...) avec ton premier dataset. Puis, tu peux faire un truc du style :
    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
     
    CategoryPlot plot = (CategoryPlot) chart.getPlot();
     
    //on ajoute un axe... Bien sûr, ceci n'est qu'un exemple
    final NumberAxis axis2 = new NumberAxis("Unités de mon axe");
    		axis2.setAutoRangeIncludesZero(false);
    		axis2.setLabelPaint(Color.blue);
            axis2.setTickLabelPaint(Color.blue);
           //ici, on dit que le deuxième axe est axis2
            plot.setRangeAxis(1, axis2);
            //ici, on dit où il se place (sur la droite du graphique par exemple)
    	plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
    // là , on définit un nouveau dataset qui prend la deuxième position dans la liste des datasets
    plot.setDataset(1, dataset[1]);
    		//et là, on lie le nouveau dataset au nouvel axe
    		plot.mapDatasetToRangeAxis(1,1);
     
                    //à partir de là, on s'occupe de faire le rendu du nouveau dataset (ici une bar en dégradé de vert et gris)
     
    CategoryItemRenderer renderer = new BarRenderer();
    		GradientPaint gp0 = new GradientPaint(
    				0.0f, 0.0f, Color.green,
    				0.0f, 0.0f, Color.lightGray
    				);
            renderer.setSeriesPaint(0, gp0);
            plot.setRenderer(1, renderer);
    Voilà, j'espère avoir pu t'aider

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut
    deux questions :
    1. Concernant le graphique en bar comment dis tu que dans la plage 1 à 3 le bar est orange et que de 4 à la fin c'est bleu ?
    2. Pour la ligne comment puis je dire tu commence à partir de la plage 4 à relier les points car de 1 à 4 je vais mettre des 0 ?


    J'espère que je suis un peu plus clair

  4. #4
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Concernant le graphique en bar comment dis tu que dans la plage 1 à 3 le bar est orange et que de 4 à la fin c'est bleu ?
    Du coup, je pense qu'il va te falloir créer une classe héritant de BarRenderer et de surcharger une méthode (probablement drawItem(...))... Mais je n'ai jamais fait ça, et je pense que ça va être un poil compliqué. Sinon la méthode un peu bourrine consiste à créer un dataset à part pour ta bar orange...
    Pour la ligne comment puis je dire tu commence à partir de la plage 4 à relier les points car de 1 à 4 je vais mettre des 0 ?
    Et bien tu utilises le renderer de ta ligne que tu auras fait hérité de LineAndShapeRenderer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myLineAndShapeRenderer renderer
    		= new myLineAndShapeRenderer();
                    plot.setRenderer(0,renderer);
    et il faut surcharger la fonction boolean getItemLineVisible(int series, int item); (le premier paramètre spécifie la série et le deuxième l'item du Dataset) pour qu'elle renvoie false quand tu ne veux pas dessiner...

    voilou

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut
    autre question qu'elle est la différence entre :
    un serie et un dataset ?

    un dataset pour plusieur series ?
    un serie pour plusieur dataset ?
    un serie = un dataset ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot.setRenderer(0,renderer);
    le 0 veut dire que tu debut ta courbe à la position zero du dataset ?

  6. #6
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Salut !

    en JFreeChartien moyen du XXIème siècle, on a plusieurs Series pour un seul dataset. Par exemple, pour le CategoryDataset qui t'intéresse, il faut se l'imaginer comme un tableau avec en ligne les Series et en colonne les catégories. Au croisement ligne colonne, on trouve la valeur de la Serie pour la categorie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plot.setRenderer(0, renderer);
    veut dire que pour le plot qui contient plusieurs Datasets, on assigne le renderer renderer au dataset situé à la position 0 dans la liste (première position).

    Ca s'éclaire un poil ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut
    j'ai compris l'histoire du :
    un dataset avec plusieurs series

    mais l'histoire du dataset en position 0 je capte pas...

  8. #8
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    ton plot, c'est ton graphique, c'est le conteneur des datasets et de leur représentation, les renderers. Il a différents axes, et appelle les fonctions de dessin des renderers.

    Quand tu utilises une méthode static de création de graphique (du type ChartFactory.createLineChart(...)) en lui passant un dataset, un plot est créé qui maintient une liste de datasets et de renderers pour ces datasets avec en première position le dataset passé en paramètre. Puis, si tu fais plot.setDataset(1), tu ajoutes à la liste un dataset qui est en deuxième position ( 1 puisque la première c'est 0 et c'est réservé au dataset passé en paramètre). C'est pareil pour les renderers... Un renderer s'occupe du rendu d'un dataset donc tu peux ajouter un renderer en position 1 en faisant plot.setRenderer(1, renderer).

    Voilà

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut
    Merci pour tout je vais mettre un tag résolu

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 16
    Points : 23
    Points
    23
    Par défaut Soucisssss
    Bonjour à tous voilà mon souci sur l'axe des ordonnées je veux faire figurer des données formatées comme suit hh:mm. Auriez vous une idée svp.

    je suis tombé sur ceci qui exprime des popurcentages mais je me demande si la methode qui m'interesserait existe

    NumberAxis axis2 = new NumberAxis("Percent");
    axis2.setNumberFormatOverride(NumberFormat.getPercentInstance());

    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

    mMerci de me repondre public privée, j'en demande trop...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Points : 95
    Points
    95
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SimpleDateFormat s = new SimpleDateFormat("MMM",new Locale(locale.toString()));
    SimpleDateFormat ss = new SimpleDateFormat("MMMyy",new Locale(locale.toString()));
    Date d=new Date();
    s1.addValue(oContenirAnneePrecendante.getResultat(i).getBValeur(),series3,ss.format(d));
    inspire toi de ça moi je formate janv 06 etc..

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

Discussions similaires

  1. menu avec couleur differente selon page
    Par Stéph utilisateur d'acces dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/01/2009, 07h01
  2. graphique bar avec max et min représenter
    Par tchounette42 dans le forum MATLAB
    Réponses: 8
    Dernier message: 16/01/2009, 14h36
  3. WPF Afficher un texte avec plusieurs couleur differentes
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/01/2008, 00h38
  4. Graphique avec couleurs dynamiques
    Par jblond dans le forum BIRT
    Réponses: 8
    Dernier message: 27/11/2007, 14h47
  5. Zone de liste avec 2 couleurs differentes
    Par uloaccess dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 17h10

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