有没有办法在JFreeChart PieChart中的图例中包含一些任意文本?我知道可以分配一个PieSectionLabelGenerator,以便自定义图表图例中出现的每个饼图部分的标签.
我想在图例中插入一些文本,与任何饼图部分完全无关,例如"图例".
我正在构建这样的图表:
private JFreeChart constructChart() {
List<Object[]> llistaValorsArr;
ParamsDTO dto = (ParamsDTO) getModelObject();
List llistaValors = statisticsService.getStatistics(dto);
if (!llistaValors.isEmpty() && !(llistaValors.get(0) instanceof Object[])){
llistaValorsArr = new ArrayList<Object[]>();
llistaValorsArr.add(new Object[]{llistaValors.get(0), ""});
}
else{
llistaValorsArr = (List<Object[]>) llistaValors;
}
DefaultPieDataset dataSet = new DefaultPieDataset();
for (Object[] objects : llistaValorsArr) {
dataSet.setValue((Comparable) objects[1], (Number)objects[0]);
}
String title = "Total: " + new Double(DatasetUtilities.calculatePieDatasetTotal(dataSet)).intValue();
JFreeChart chart = ChartFactory.createPieChart(title, dataSet, true, false, true);
final PiePlot plot = (PiePlot) chart.getPlot();
plot.setForegroundAlpha(0.5f);
plot.setNoDataMessage("No data");
PieSectionLabelGenerator labelGenerator = new StandardPieSectionLabelGenerator("{0} - {1} ({2})"){
@Override
protected Object[] createItemArray(PieDataset dataset, Comparable key) {
// TODO Auto-generated method stub
Object[] array = super.createItemArray(dataset, key);
array[0] = getEntityLabel(key);
return array;
}
};
plot.setLabelGenerator(labelGenerator);
plot.setLegendLabelGenerator(labelGenerator);
//plot.setStartAngle(290);
boolean circular = true;
plot.setCircular(circular);
return chart;
}
Run Code Online (Sandbox Code Playgroud)
更新:我刚刚发现JFreeChart.addSubtitle(),希望它可以将它放在图例上方,但它只会在图表的标题旁边添加一个字幕.
更新2:我一直试图在一个包装TextTitle内放置一个LegendTitle,但在图表构建时它似乎是空的.
LegendTitle legend = chart.getLegend();
BlockContainer container = legend.getWrapper();
container.add(new TextTitle("Legend"));
Run Code Online (Sandbox Code Playgroud)
添加"图例"文本来装饰图例并不是那么复杂.
看一下源代码org.jfree.chart.JFreeChart,看到这addLegend()只不过addSubtitle()是在幕后,一切都表明应该用它来实现addSubtitle().
综观其中部分 org.jfree.chart.JFreeChart增加了自己LegendTitle的项目,我们可以找到安装JFreeChart用来放置传说这里.
所以,解决的办法是添加,例如,TextTitle在Chart以类似的方式.这里的相关设置是setPosition(RECTANGLE.BOTTOM).
TextTitle legendText = new TextTitle("This is LEGEND: ");
legendText.setPosition(RectangleEdge.BOTTOM);
chart.addSubtitle(legendText);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8617 次 |
| 最近记录: |