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 confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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

  3. #3
    Expert confirmé

    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
    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.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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!

  5. #5
    Expert confirmé

    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
    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.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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!

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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

  8. #8
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    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 :tagcode: ni le tag :resolu:

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

  9. #9
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    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 confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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!

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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

  12. #12
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    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 :tagcode: ni le tag :resolu:

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

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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

  14. #14
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    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...

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Ne soyez pas timide hein, lancez vous, toute proposition est la bienvenue!

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Toujours personne pour me répondre?

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