Можно ли добавить Легенду к сюжету в JFreeChart? - PullRequest
5 голосов
/ 30 июня 2010

Я пытаюсь добавить легенду под графиком в разбросанном графике, как показано ниже.Кто-нибудь знает, возможно ли это?

До: alt text

После: alt text

Ответы [ 3 ]

7 голосов
/ 01 июля 2010

Вот созданный мной генератор пользовательских меток:

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

5 голосов
/ 01 июля 2010

Расширение StandardXYItemLabelGenerator часто является полезным подходом, но поставляемых конструкторов может быть достаточно.Для этого генератора значения 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);
1 голос
/ 30 июня 2010

Управляется рендерером:

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