Я пытаюсь добавить легенду в соответствии с графиком в рассеянной диаграмме как показано ниже. Кто-либо знает, возможно ли это?
Прежде:
После:
Расширение 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);
Вот созданный мной пользовательский генератор меток:
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()));
и вот результат:
Это контролируется средством визуализации:
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);