Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jfreechart customize piechart to show absolute values and percentages

How can this compilable minimal code snippet example, which uses JFreeChart as plotting API, adapted in order to show both absoulte values AND percentages? I couldn't extract this information neither from any code snippet on the internet nor from the JFreechart manual itself. The code snippet produces a pie chart showing only percentages. The absolute values in my case also matter, so i need to display them right under the percentages.

Here is the code: (Note it lacks the imports)

public class MyMinimalPieChartExample {
    public static void main(String[] args) {
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("some data 1",99);
    dataset.setValue("some data 2", 77);

    //third adaption
    JFreeChart someChart = ChartFactory.createPieChart(
            "some chart header", dataset,
            true, true, false);
    PiePlot illegalLegalRestPiePlot4 = (PiePlot) someChart.getPlot();
    illegalLegalRestPiePlot4.setSectionPaint("some data 1", new Color(0, 255, 0));
    illegalLegalRestPiePlot4.setSectionPaint("some data 2",
            new Color(255, 0, 0));
    PiePlot plot4 = (PiePlot) someChart.getPlot();
    plot4.setExplodePercent("some data 1", 0.4);
    plot4.setSimpleLabels(true);

    PieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator(
            "{0} = {2}", new DecimalFormat("0"), new DecimalFormat("0.00%"));
    plot4.setLabelGenerator(generator);

    try {
        ChartUtilities.saveChartAsJPEG(new File("C:/myMinimalPieChartExample.jpeg"),
                someChart, 1200, 1000);
    } catch (Exception e) {
        System.err.println("couldn't write chart");
    }
    }
}
like image 293
kiltek Avatar asked Jul 06 '13 09:07

kiltek


1 Answers

Use the MessageFormat symbol {1} for the absolute section value.

See StandardPieSectionLabelGenerator for details.

pie plot

public class MyMinimalPieChartExample {

    private static final String KEY1 = "Datum 1";
    public static final String KEY2 = "Datum 2";

    public static void main(String[] args) {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue(KEY1, 99);
        dataset.setValue(KEY2, 77);

        JFreeChart someChart = ChartFactory.createPieChart(
            "Header", dataset, true, true, false);
        PiePlot plot = (PiePlot) someChart.getPlot();
        plot.setSectionPaint(KEY1, Color.green);
        plot.setSectionPaint(KEY2, Color.red);
        plot.setExplodePercent(KEY1, 0.10);
        plot.setSimpleLabels(true);

        PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator(
            "{0}: {1} ({2})", new DecimalFormat("0"), new DecimalFormat("0%"));
        plot.setLabelGenerator(gen);

        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new ChartPanel(someChart) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 300);
            }
        });
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);

    }
}
like image 164
trashgod Avatar answered Sep 20 '22 02:09

trashgod