是否可以在JFreeChart中将图例添加到图中?

时间:2010-06-30 06:04:51

标签: java charts jfreechart

我正在尝试在散点图中的绘图下添加图例,如下所示。有谁知道这是否可能?

在: alt text

在: alt text

3 个答案:

答案 0 :(得分: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()));

这是结果:

alt text

答案 1 :(得分:5)

扩展StandardXYItemLabelGenerator通常是一种有用的方法,但提供的constructors可能就足够了。对于此生成器,MessageFormat ArgumentIndex 值对应系列名称范围

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);

答案 2 :(得分:1)

这是在渲染器上控制的:

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