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

Servlets/JSP Java Discussion :

[JFreechart] changer les couleurs des barres d'un diagramme


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut [JFreechart] changer les couleurs des barres d'un diagramme
    Bonjour.

    Je débute avec jfreechart et je suis déjà confronté à un problème.

    Mon but est de dessiner un graphique histogramme. Ma fonction prends en paramètre un tableau qui contient un mois, un intitulé, et un nombre.


    Je veux que selon la note, la couleur soit celle que je désire, mais je n'arrive pas à le faire.

    J'ai en effet mon code qui ressemble pour le moment à ca (je passe les valeurs en dur...)

    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
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     
        DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
        dataset.addValue(1, "Tomate", "Janvier"); 
        dataset.addValue(3, "Chou", "Février"); 
        dataset.addValue(1, "Tomate", "Mars"); 
        dataset.addValue(2, "Carotte", "Avril"); 
        dataset.addValue(0, "Patate", "Mai"); 
        dataset.addValue(4, "Poireau", "Juin"); 
        dataset.addValue(0, "Patate", "Juillet"); 
        dataset.addValue(1, "Tomate", "Août"); 
        dataset.addValue(2, "Carotte", "Septembre");
        dataset.addValue(3, "Chou", "Octobre"); 
        dataset.addValue(2, "Carotte", "Novembre"); 
        dataset.addValue(4, "Poireau", "Décembre"); 
     
        JFreeChart barChart = ChartFactory.createBarChart("Choix du légume", "", 
          "Num legume", dataset, PlotOrientation.VERTICAL, false, false, false);
        CategoryPlot plot = barChart.getCategoryPlot();
        OutputStream out = response.getOutputStream(); 
        response.setContentType("image/png"); 
        ChartUtilities.writeChartAsPNG(out, barChart, 305, 230); 
      } 
    }

    J'ai essayé de changer la couleur, mais je ne sais pas comment dire que pour chou je veux du jaune, pour Patate du marron...

    J'ai essayé des commandes du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setSeriesPaint(0, Color.red);
        renderer.setSeriesPaint(1, Color.green);
        renderer.setSeriesPaint(2, Color.blue);
    Mais c'est un numéro en paramètre, donc ce n'est pas ce que je recherche



    Si quelqu'un s'y connait en jfreechart, je serais heureux qu'il me fasse part de son expérience.

    Merci
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  2. #2
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    J'ai réussi à force de tatonner de trouver 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
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     
    	//row keys
    	String series1 = "Chou";
    	String series2 = "Carotte";
    	String series3 = "Patate";
    	String series4 = "Poireau";
    	String series5 = "Tomate";
    	//column keys
    	String category1 = "Janvier";
    	String category2 = "Février";
    	String category3 = "Mars";
    	String category4 = "Avril";
    	String category5 = "Mai";
    	String category6 = "Juin";
    	String category7 = "Juillet";
    	String category8 = "Août";
    	String category9 = "Septembre";
    	String category10 = "Octobre";
    	String category11 = "Novembre";
    	String category12 = "Décembre";
     
     
    	Color lightgray = new Color(148, 239, 148);
     
     
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     
     
        dataset.addValue(1.1, series1, category1); 
        dataset.addValue(3, series5, category2); 
        dataset.addValue(1.8, series3, category3); 
        dataset.addValue(2.71, series5, category4); 
        dataset.addValue(0.6, series1, category5); 
        dataset.addValue(2.3, series4, category6); 
        dataset.addValue(0.97, series1, category7); 
        dataset.addValue(1.5, series2, category8); 
        dataset.addValue(0.2, series1, category9);
        dataset.addValue(1.9, series3, category10); 
        dataset.addValue(2.8, series5, category11); 
        dataset.addValue(1.35, series2, category12); 
     
     
     
        JFreeChart barChart = ChartFactory.createBarChart("Choix des légumes", "", 
          "Note legume", dataset, PlotOrientation.VERTICAL, false, false, false);
     
     
     
        CategoryPlot plot = barChart.getCategoryPlot();
     
     
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
     
     
     
        GradientPaint gp1 = new GradientPaint(
        		0.0f, 0.0f, lightgray,
        		0.0f, 0.0f, new Color(148, 239, 148)
        		);
     
     
        renderer.setSeriesPaint(0, Color.blue);
     
     
        renderer.setSeriesPaint(1, gp1);
     
     
        renderer.setSeriesPaint(2, Color.yellow);
        renderer.setSeriesPaint(3, Color.orange);
        renderer.setSeriesPaint(4, Color.red);
     
     
        response.setContentType("image/png");
        OutputStream out = response.getOutputStream(); 
     
     
     
     
        ChartUtilities.writeChartAsPNG(out, barChart, 305, 230); 
      } 
    }


    Le résultat donne ce graphique:



    Je ne comprends pas pourquoi j'ai des espacements entre les barres, moi je veux que les barres soient collées les unes aux autres, et que leur largeur soit égales pour remplir le graphique, si vous connaissez la marche à suivre...

    Merci
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  3. #3
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu as des espacements entre les barres parce que tu as cinq séries et donc, il réserve de la place pour les 5 séries dans chacune des catégories.
    Modératrice Java - Struts, Servlets/JSP, ...

  4. #4
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Ha mais c'est pas ce que je voulais!!

    Mince, je vois pas comment je vais faire alors pour affecter une couleur selon la note

    Si quelqu'un à la soluce, où si quelqu'un à une idée de la marche à suivre, je suis preneur!
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  5. #5
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JFreeChart barChart = ChartFactory.createBarChart("Choix du légume", "", 
          "Num legume", dataset, PlotOrientation.VERTICAL, false, false, false);
    par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JFreeChart barChart = ChartFactory.createStackedBarChart("Choix du légume", "", 
          "Num legume", dataset, PlotOrientation.VERTICAL, false, false, false);
    et vois si ça te convient mieux.
    Modératrice Java - Struts, Servlets/JSP, ...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Merci c'est vraiment parfait!!!


    Excellent, YES!!

    Ha tu imagines pas comment ca fait du bien de voir mon graphique comme je le voulais, lol!
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  7. #7
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Je retire le résolu juste pour avoir un renseignement.

    Pour styliser la couleur des barres, j'ai donc fait des setSeriesPaint.

    Le hic, c'est que ca fait pas ce que je veux.

    Là, j'ai remarqué que ca affecte la couleur selon l'ordre d'apparition, or, moi, ce que je veux, c'est affecter a series1 telle couleur, series2 telle couleur.


    Je ne sais pas quelle fonction utiliser pour que faire ce peut

    merci de votre aide
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  8. #8
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 801
    Points
    4 801
    Par défaut
    Et hop, une méthode extrait d'un de mes projet. J'espère que ça t'aidera :
    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
     
    /**
    	 * 
    	 * @param xydataset
    	 */
    	/**
    	 * Let us create our environment for drawing our graphics.
    	 */
    	public void createChart(org.jfree.data.xy.XYDataset xydataset){
    		this.jfreechart = ChartFactory.createXYLineChart(this.title, this.axis_x_label, this.axis_y_label, xydataset, org.jfree.chart.plot.PlotOrientation.VERTICAL, true, true, false);
    		if(this.title.compareTo("Original spectrum + filtered spectra")==0){
    			org.jfree.chart.plot.XYPlot xyplot = this.jfreechart.getXYPlot();
    			int x = xyplot.getDatasetCount();
    			XYItemRenderer xyItemRenderer = xyplot.getRendererForDataset(xyplot.getDataset(0));
    			xyItemRenderer.setSeriesPaint(0, new java.awt.Color(255, 0, 0, 60));
    			xyItemRenderer.setSeriesStroke(0, new java.awt.BasicStroke(2.0f));
    			xyItemRenderer = xyplot.getRendererForDataset(xyplot.getDataset(x-1));
    			xyItemRenderer.setSeriesPaint(xyplot.getSeriesCount()-1, new java.awt.Color(0, 255, 0));
    			xyItemRenderer.setSeriesStroke(xyplot.getSeriesCount()-1, new java.awt.BasicStroke(2.0f));
    		}
    		else{
    			org.jfree.chart.plot.XYPlot xyplot = this.jfreechart.getXYPlot();
    			int x = xyplot.getDatasetCount();
    			XYItemRenderer xyItemRenderer = xyplot.getRendererForDataset(xyplot.getDataset(x-1));
    			xyItemRenderer.setSeriesPaint(xyplot.getSeriesCount()-1, new java.awt.Color(255, 150, 0));
    		}
    		this.chartPanel = new ChartPanel(this.jfreechart);
        }
    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  9. #9
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    Points : 97
    Points
    97
    Par défaut
    Le hic, c'est que ca fait pas ce que je veux.

    Là, j'ai remarqué que ca affecte la couleur selon l'ordre d'apparition, or, moi, ce que je veux, c'est affecter a series1 telle couleur, series2 telle couleur.
    J'ai eu exactement le même problème hier...
    Effectivement, cela dépend de l'ordre d'apparition...
    Mon dataset étaint dans mon cas remplis par une liste, et donc il ma suffit de trier cette liste afin de controler l'ordre d'apparition de "bar" afin de controler les couleurs.

  10. #10
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Le problème, c'est que je dois afficher en fonction du mois, ca veut plus rien dire sinon mon graphique


    Rha c'est rageant, je vais devoir trouver autre chose!
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  11. #11
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    GLDavid, merci pour ta methode, je suis entrain de faire des tests avec.

    Par contre, tout mon code est là pour moi, je sais pas comment utiliser tout ce que tu as donné dedans
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  12. #12
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 801
    Points
    4 801
    Par défaut
    Salut

    Ravi de t'aider mais je ne comprend pas ce que tu veux dire dans ton dernier post.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  13. #13
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Et bien je ne sais pas du tout comment utiliser les XYplot


    Je connais pas jfreechart, je débute, et les XYplot, j'imagine qu'ils sont présents dans mon chart, mais je sais pas quelles valeurs ils ont, et si c'est avec eux que je peux changer la couleur comme je le veux...


    Ma question est la suivante:

    Est-il possible d'affecter une couleur donnée à une série donnée


    Si vous avez une réponse positive, je ne pourrais m'empêcher de faire: MERCIIIII
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  14. #14
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Je repensais à la proposition de metalpetsFR

    Si je fais ca, est ce que je peux réorganiser ensuite mes barres en les rageant par ordre croissant sur la légende... (Je remplace Janvier par 01 etc)

    J'ai cherché des méthodes dans la javadoc, mais je suis pas sur de leur utilisation, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       plot.setDatasetRenderingOrder()
    Je sais pas trop ce que ca fait, pas vraiment bien compris l'usage...
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  15. #15
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Ne soyez pas timide hein, lancez vous, toute proposition est la bienvenue!
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

  16. #16
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 70
    Points
    70
    Par défaut
    Toujours personne pour me répondre?
    Qui osera affronter ma brute??
    Si tu perds, rejoins mon clan

Discussions similaires

  1. Changer les couleurs des axes
    Par Ptinéwik dans le forum MATLAB
    Réponses: 6
    Dernier message: 01/02/2008, 15h08
  2. [C#] Changer les couleurs des titres colonnes d'une listView
    Par ExSter dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/04/2007, 21h02
  3. Comment changer les couleurs des lignes avec displaytag
    Par rlnd23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/10/2006, 13h52
  4. changer les couleurs des frames
    Par jack_1981 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/12/2005, 16h26

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