2010-06-30 10 views

Respuesta

5

extienden StandardXYItemLabelGenerator es a menudo un enfoque útil, pero el constructors suministrado puede ser suficiente. Para este generador, la MessageFormatArgumentIndex valores corresponden al nombre serie, dominio y gama.

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, se puede controlar el etiquetado series individuales con

renderer.setSeriesItemLabelsVisible(true); 
+0

Vea también este [ejemplo] (http://stackoverflow.com/a/8932920/230513) para 'StandardCategoryToolTipGenerator'. – trashgod

1

Esto se controla en el procesador:

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

Gracias por la respuesta. Intenté esto pero todavía apareció. ¿Hay algo más que deba hacer antes? ¿Tal vez asignar etiquetas a cada parcela? – rmartinus

+0

Creo que lo tengo ahora ... Creé mi propio generador de etiquetas de elementos llamado "LegendXYItemLabelGenerator (..)" y lo puse a funcionar. Además de "renderer.setBaseItemLabelsVisible (true);", agregué "renderer.setBaseItemLabelGenerator (new LegendXYItemLabelGenerator (plot.getLegendItems()));" – rmartinus

+0

¿Es esto posible en un 'XYAreaRenderer'? Estoy intentando ponerlo en funcionamiento y puedo hacerlo con 'XYLineAndShapeRenderer', pero el mismo código no funciona para' XYAreaRenderer'. ' – skaz

7

Aquí está el generador de etiqueta personalizada 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 añade este código, además de @ código de Guilaume:

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

y aquí está el resultado:

alt text

+0

+1 para el buen ejemplo. He sugerido un enfoque alternativo en otra respuesta. – trashgod

Cuestiones relacionadas