加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:55:52 所属栏目:Java 来源:网络整理
导读:有没有办法在JFreeChart PieChart中的图例中包含一些任意文本?我知道可以分配一个PieSectionLabelGenerator来自定义图表图例上出现的每个饼图部分的标签. 我想在图例中插入一些文本,与任何饼图部分完全无关,例如“图例”. 我正在构建这样的图表: private J
有没有办法在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;
}

更新:我刚刚发现了JFreeChart.addSubtitle(),希望它能够将它定位在图例的正上方,但它只会在图表的标题旁边添加一个副标题.

更新2:我一直在尝试将TextTitle放在LegendTitle的包??装器中,但在图表构建时它似乎为空.

LegendTitle legend = chart.getLegend();
BlockContainer container = legend.getWrapper();
container.add(new TextTitle("Legend"));

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

解决方法

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

查看org.jfree.chart.JFreeChart添加其自己的LegendTitle项目的部分,我们可以找到JFreeChart用于放置Legend here的设置.

因此,解决方案是以类似的方式向图表添加TextTitle.这里的相关设置是setPosition(RECTANGLE.BOTTOM).

TextTitle legendText = new TextTitle("This is LEGEND: ");
legendText.setPosition(RectangleEdge.BOTTOM);
chart.addSubtitle(legendText);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读