如何设置饼图中显示的标签数?

时间:2019-02-27 07:59:13

标签: java label jfreechart pie-chart

我在这张图中的饼图中得到了78个标签。

too_many_labels_in_pie_chart

我只想按降序显示前3个标签。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

创建自定义PieSectionLabelGenerator并在您喜欢显示标签时返回ec,e,en

示例

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);
    }
}

输出,类似的示例,但显示前5个值而不是后3个值,因此显示((PiePlot) chart.getPlot()).setLabelGenerator(new PieMaximumLabelsGenerator(3, false));

output


但是,我的首选是在切片的弧角足够大的情况下显示标签。这可以通过以下方法完成:收集图表中各项的总值,然后使用((PiePlot) chart.getPlot()).setLabelGenerator(new PieMaximumLabelsGenerator(5, true));中的Number value = dataset.getValue(key);计算角度以获得切片的当前角度(尺寸)。