2013-07-06 13 views
9

Wie kann dieses kompilierbare Beispiel für einen Minimalcode, der JFreeChart als Plot-API verwendet, angepasst werden, um beide absoluten Werte UND Prozentsätze anzuzeigen? Ich konnte diese Informationen weder aus einem Code-Snippet im Internet noch aus dem JFrefetch-Handbuch selbst extrahieren. Das Code-Snippet erzeugt ein Tortendiagramm, das nur Prozentwerte anzeigt. Die absoluten Werte in meinem Fall sind auch wichtig, also muss ich sie direkt unter den Prozentsätzen anzeigen. Hierjfreechart customize piechart, um absolute Werte und Prozentsätze anzuzeigen

ist der Code: (Beachten Sie es fehlen die Importe)

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

Antwort

13

Verwenden Sie das MessageFormat Symbol {1} für den absoluten Schnittswert. Weitere Informationen finden Sie unter 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

Siehe auch diese verwandten [Antwort] (http://stackoverflow.com/a/3551238/230513). – trashgod