[java] Comment dessiner une légende en tant que table avec JFreeCharts?


Answers

Question

Je suis capable de tracer ce graphique comme ceci:

Mais je veux le représenter comme ça, ce qui veut dire en bas du graphique et en tant que tableau (au moins en avoir un).

Voici mon code:

package charts;

import java.awt.*;
import java.io.*;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleEdge;

public class PieChart {
    public static void main( String[ ] args ) throws Exception
    {

        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("A", new Double( 36.95 ));
        dataset.setValue("B", new Double( 31.51 ));
        dataset.setValue("C", new Double( 12.44 ));
        dataset.setValue("D", new Double( 6.41 ));
        dataset.setValue("E", new Double( 2.76 ));
        dataset.setValue("F", new Double( 2.29 ));
        dataset.setValue("G", new Double( 1.71 ));
        dataset.setValue("H", new Double(1.21));
        dataset.setValue("I", new Double(4.71));

        JFreeChart chart = ChartFactory.createPieChart(
                "", // chart title
                dataset, // dataset
                true, // legends
                true, // tooltips
                false); // urls

        // remove legend border
        chart.getLegend().setFrame(BlockBorder.NONE);

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setSimpleLabels(true);

        PieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator("{2}");
        plot.setLabelGenerator(generator);

        // background
        plot.setBackgroundPaint(Color.WHITE); //
        plot.setOutlineVisible(false); // remove image border

        // label
        plot.setLabelFont(new Font("Courier New", Font.BOLD, 16));
        plot.setLabelPaint(Color.WHITE);

        Color transparent = new Color(0.0f, 0.0f, 0.0f, 0.0f);
        plot.setLabelBackgroundPaint(transparent); //background
        plot.setLabelOutlinePaint(transparent); //border
        plot.setLabelShadowPaint(transparent); //shadow

        // legend
        plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}: {1}"));

        // sections
        // use gradients and white borders for the section colours
        plot.setSectionPaint("A",  new Color(126, 208, 150));
        plot.setSectionPaint("B", new Color(41, 157, 135));
        plot.setSectionPaint("C", new Color(25, 144, 212));
        plot.setSectionPaint("D", new Color(95, 85, 25));
        plot.setSectionPaint("E", new Color(22, 90, 63));
        plot.setSectionPaint("F", new Color(134, 125, 25));
        plot.setSectionPaint("G", new Color(226, 200, 14));
        plot.setSectionPaint("H", new Color(241, 172, 18));
        plot.setSectionPaint("I", new Color(245, 200, 51));
        plot.setBaseSectionOutlinePaint(Color.WHITE);
        plot.setSectionOutlinesVisible(true);

        // chart title at the bottom
        TextTitle legendText = new TextTitle("THIS IS JUST A TEST");
        legendText.setPosition(RectangleEdge.BOTTOM);
        chart.addSubtitle(legendText);

        LegendTitle legend = chart.getLegend();
        legend.setPosition(RectangleEdge.RIGHT);

        int width = 640; /* Width of the image */
        int height = 480; /* Height of the image */
        File pieChart = new File( "PieChart.png" );
        ChartUtilities.saveChartAsPNG(pieChart, chart, width, height);
    }
}



Related