在JFreeChart PieChart中将与段无关的文本添加到Legend中

Xav*_*ica 3 java jfreechart

有没有办法在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)

添加"图例"文本来装饰图例并不是那么复杂.

Xav*_*ica 8

看一下源代码org.jfree.chart.JFreeChart,看到这addLegend()只不过addSubtitle()是在幕后,一切都表明应该用它来实现addSubtitle().

综观其中部分 org.jfree.chart.JFreeChart增加了自己LegendTitle的项目,我们可以找到安装JFreeChart用来放置传说这里.

所以,解决的办法是添加,例如,TextTitleChart以类似的方式.这里的相关设置是setPosition(RECTANGLE.BOTTOM).

TextTitle legendText = new TextTitle("This is LEGEND: ");
legendText.setPosition(RectangleEdge.BOTTOM);
chart.addSubtitle(legendText);
Run Code Online (Sandbox Code Playgroud)