2013-07-06 183 views
9

这个可编译的最小代码片段示例如何使用JFreeChart作为绘图API进行调整,以便显示绝对值和百分比? 我无法从互联网上的任何代码片段或JFreechart手册本身中提取此信息。代码片断会生成一个只显示百分比的饼图。在我的情况下绝对值也很重要,所以我需要在百分比下正确显示它们。jfreechart自定义饼图以显示绝对值和百分比

下面是代码:(注意它缺乏进口)

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"); 
    } 
    } 
} 

回答

13

使用了绝对的区间值的MessageFormat符号{1}

查看StandardPieSectionLabelGenerator了解详情。

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

    } 
} 
+0

另见本相关的【答案】(http://stackoverflow.com/a/3551238/230513)。 – trashgod