java jfreechart 自定义饼图以显示绝对值和百分比
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17501750/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jfreechart customize piechart to show absolute values and percentages
提问by kiltek
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.
这个使用 JFreeChart 作为绘图 API 的可编译最小代码片段示例如何进行调整以显示 绝对值和百分比?我无法从互联网上的任何代码片段或 JFreechart 手册本身中提取此信息。代码片段生成一个仅显示百分比的饼图。在我的情况下绝对值也很重要,所以我需要在百分比下显示它们。
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");
}
}
}
回答by trashgod
Use the MessageFormat
symbol {1}
for the absolute section value.
使用MessageFormat
符号{1}
表示绝对截面值。
See StandardPieSectionLabelGenerator
for details.
详情请参阅StandardPieSectionLabelGenerator
。
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);
}
}