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; } 更新:我刚刚发现了 更新2:我一直在尝试将TextTitle放在LegendTitle的包??装器中,但在图表构建时它似乎为空. LegendTitle legend = chart.getLegend(); BlockContainer container = legend.getWrapper(); container.add(new TextTitle("Legend")); 添加“图例”文本来装饰图例并不是那么复杂. 解决方法
查看
org.jfree.chart.JFreeChart 的源代码,看到addLegend()只不过是幕后的addSubtitle(),一切都表明应该使用addSubtitle()来实现.
查看 因此,解决方案是以类似的方式向图表添加TextTitle.这里的相关设置是setPosition(RECTANGLE.BOTTOM). TextTitle legendText = new TextTitle("This is LEGEND: "); legendText.setPosition(RectangleEdge.BOTTOM); chart.addSubtitle(legendText); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |