Создайте пользовательский PieSectionLabelGenerator
и верните null
, когда не нравится отображать метку.
Пример
public class PieMaximumLabelsGenerator extends StandardPieSectionLabelGenerator {
private static final long serialVersionUID = 1385777973353453096L;
private int nrLabels;
private boolean showFirst;
/**
* A custom label generator to show only limited numbers of labels
* @param nrLabels, number of labels to show
* @param showFirst, if true, show first labels otherwise show the last
*/
public PieMaximumLabelsGenerator(int nrLabels, boolean showFirst){
this.nrLabels = nrLabels;
this.showFirst = showFirst;
}
@Override
public String generateSectionLabel(PieDataset dataset, Comparable key) {
int index = dataset.getIndex(key);
if (showFirst){
if (index>=nrLabels){
return null; //no more lables if index is above
}
}else{
if (index<dataset.getItemCount()-nrLabels){
return null; //no labels if index is not enough
}
}
return super.generateSectionLabel(dataset, key);
}
}
Затем установите это на свой график
((PiePlot) chart.getPlot()).setLabelGenerator(new PieMaximumLabelsGenerator(3, false));
Вывод , аналогичный пример, но с отображением первых 5 значений вместо последних 3, следовательно, ((PiePlot) chart.getPlot()).setLabelGenerator(new PieMaximumLabelsGenerator(5, true));
Однако я предпочитаю отображать метку, если угол дуги среза достаточно велик.Это можно сделать, собрав итоговые значения элементов на диаграмме, а затем рассчитав угол, используя Number value = dataset.getValue(key);
в generateSectionLabel
, чтобы получить текущий угол (размер) среза.