Изменить цвет jfreechart круговой диаграммы - PullRequest
4 голосов
/ 07 декабря 2009

Я хочу изменить цвет «кусочков» пирога в моей jfreechart PieChart3D, это код, который отображает круговую диаграмму:

<% 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);
%>

Любая помощь высоко ценится.

Ответы [ 2 ]

9 голосов
/ 07 декабря 2009

Цвет для каждого раздела обычно заполняется из DrawingSupplier графика. Вы можете изменить настройки по умолчанию, позвонив по номеру

PiePlot.setSectionPaint(Comparable key, Paint paint);

С этим, тем не менее, вам нужно будет установить каждый раздел вручную. Если вам просто нужен другой набор цветов, похоже, вы могли бы реализовать DrawingSupplier.

1 голос
/ 26 октября 2012

Вы можете использовать

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

и как внутренний класс:

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]); 
            } 
        } 
    } 
...