java - example - ¿Es posible agregar leyenda a la trama en JFreeChart?
pie chart java (3)
Estoy tratando de agregar una leyenda debajo de la trama en un gráfico disperso como se muestra a continuación. Alguien sabe si esto es posible?
Antes de:
Después:
Esto se controla en el renderizador:
XYPlot plot = (XYPlot) chart.getPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseItemLabelsVisible(true);
La extensión de StandardXYItemLabelGenerator
es a menudo un enfoque útil, pero los constructores suministrados pueden ser suficientes. Para este generador, los valores de MessageFormat
ArgumentIndex corresponden al nombre , dominio y rango de la serie .
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2); // etc.
XYItemLabelGenerator generator =
new StandardXYItemLabelGenerator("{0} {1} {2}", format, format);
renderer.setBaseItemLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
Además, puede controlar el etiquetado de series individuales con
renderer.setSeriesItemLabelsVisible(true);
Aquí está el generador de etiquetas personalizado que creé:
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();
}
}
y luego agregué este código además del código de @ Guilaume:
renderer.setBaseItemLabelsVisible(true);
renderer.setBaseItemLabelGenerator(new LegendXYItemLabelGenerator(plot.getLegendItems()));
y aquí está el resultado: