如何设置饼图中显示的标签个数?
How to set the numbers of labels displayed in a pie chart?
我在这张图这样的饼图中得到了 78 个标签。
我只想按降序显示前 3 个标签。
我该怎么做?
创建自定义 PieSectionLabelGenerator
和 return 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));
但我的偏好是,如果切片的弧角足够大,则显示标签。这可以通过收集图表中项目的 totale 值,然后使用 generateSectionLabel
中的 Number value = dataset.getValue(key);
计算角度来获得切片的当前角度(维度)来完成。
我在这张图这样的饼图中得到了 78 个标签。
我只想按降序显示前 3 个标签。
我该怎么做?
创建自定义 PieSectionLabelGenerator
和 return 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));
但我的偏好是,如果切片的弧角足够大,则显示标签。这可以通过收集图表中项目的 totale 值,然后使用 generateSectionLabel
中的 Number value = dataset.getValue(key);
计算角度来获得切片的当前角度(维度)来完成。