在JFreeChart中,是否可以向图表添加图例?

5
我试图在散点图下方添加一个图例,如下所示。 有人知道这是否可能吗?
之前: alt text 之后: alt text
3个回答

7
这是我创建的自定义标签生成器:
public class LegendXYItemLabelGenerator extends StandardXYItemLabelGenerator
        implements XYItemLabelGenerator, Cloneable, PublicCloneable,
        Serializable {
    private LegendItemCollection legendItems;

    public LegendXYItemLabelGenerator(LegendItemCollection legendItems) {
        super();
        this.legendItems = legendItems;
    }

    @Override
    public String generateLabel(XYDataset dataset, int series, int item) {
        LegendItem legendItem = legendItems.get(series);
        return legendItem.getLabel();
    }
}

然后我在@Guilaume的代码的基础上添加了这段代码:

renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelGenerator(new LegendXYItemLabelGenerator(plot.getLegendItems()));

以下是结果:

替代文本


对于好的例子点个赞。我在另一个答案中提出了一种替代方法。 - trashgod

5
扩展 StandardXYItemLabelGenerator 是一个常用的方法,但提供的构造函数可能已经足够。对于这个生成器,MessageFormatArgumentIndex 值对应于系列名称范围
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2); // etc.
XYItemLabelGenerator generator =
    new StandardXYItemLabelGenerator("{0} {1} {2}", format, format);
renderer.setBaseItemLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);

此外,您可以使用以下方法控制单个系列的标签:
renderer.setSeriesItemLabelsVisible(true);

请参考此示例,了解StandardCategoryToolTipGenerator - trashgod

1

这是在渲染器上控制的:

XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);

谢谢你的回答。我尝试了这个方法,但它仍然没有显示出来。在此之前,我可能需要做其他事情吗?也许为每个图形分配标签? - rmartinus
我现在明白了...我创建了自己的项目标签生成器,名为“LegendXYItemLabelGenerator(..)”,并且让它工作起来了。除了“renderer.setBaseItemLabelsVisible(true);”外,我还添加了“renderer.setBaseItemLabelGenerator(new LegendXYItemLabelGenerator(plot.getLegendItems());”。 - rmartinus
这个在XYAreaRenderer上可行吗?我正在尝试让它工作,对于XYLineAndShapeRenderer我可以做到,但是同样的代码对于XYAreaRenderer不起作用。 - skaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接