Frage

Ich möchte in meinem jfreechart PieChart3D die Farbe der „Stücke“ der Torte ändern, dies ist der Code, der die piechart macht:

<% response.setContentType("image/png"); %><%@page import="org.jfree.data.general.*"%><%@page import="org.jfree.chart.*"%><%@page import="org.jfree.chart.plot.*"%><%@page import="java.awt.Color" %><%

        DefaultPieDataset ds = (DefaultPieDataset)session.getAttribute("usagePieOutputDataset");

  JFreeChart chart = ChartFactory.createPieChart3D
  (
   null,  // Title
   ds,  // Dataset
   false,  // Show legend
   false,  // Use tooltips
   false  // Configure chart to generate URLs?
  );

     chart.setBackgroundPaint(Color.WHITE);
     chart.setBorderVisible(false);

  PiePlot3D plot = ( PiePlot3D )chart.getPlot();
  plot.setDepthFactor(0.0);
  plot.setLabelGenerator(null); //null means no labels

  plot.setLabelOutlinePaint(Color.LIGHT_GRAY);
  plot.setLabelFont(new java.awt.Font("Arial",  java.awt.Font.BOLD, 10));


  ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 150, 144);
%>

Jede Hilfe ist sehr geschätzt.

War es hilfreich?

Lösung

Die Farbe für jeden Abschnitt wird in der Regel von der Handlung des DrawingSupplier bevölkert. Sie können die Standardwerte außer Kraft setzen, aber durch den Aufruf

PiePlot.setSectionPaint(Comparable key, Paint paint);

Mit diesem obwohl, müssen Sie jeden Abschnitt manuell einzustellen. Wenn Sie nur einen anderen Satz von Farben wünschen, sieht es aus wie Sie DrawingSupplier implementieren könnte.

Andere Tipps

Sie können mit

 Color[] colors = {Color.green, Color.red, Color.yellow .. /* size of data set */}; 
 PieRenderer renderer = new PieRenderer(colors); 
 renderer.setColor(plot, ds);

und als innere Klasse:

static class PieRenderer 
    { 
        private Color[] color; 

        public PieRenderer(Color[] color) 
        { 
            this.color = color; 
        }        

        public void setColor(PiePlot plot, DefaultPieDataset dataset) 
        { 
            List <Comparable> keys = dataset.getKeys(); 
            int aInt; 

            for (int i = 0; i < keys.size(); i++) 
            { 
                aInt = i % this.color.length; 
                plot.setSectionPaint(keys.get(i), this.color[aInt]); 
            } 
        } 
    } 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top