无法在环形图中显示中心文本

Unable to display center text in ring chart

我正在尝试使用 jfree 图表库生成圆环图或环形图。 Ringchart 已成功生成,但唯一的问题是未显示环内的居中文本。以下是示例片段。 图表生成代码

JFreeChart chart = ChartFactory.createRingChart(heading, dataSet, legend, tooltips, urls);

居中文本相关代码如下

RingPlot pie = (RingPlot) chart.getPlot();
pie.setBackgroundPaint(Color.WHITE);
pie.setOutlineVisible(false);
pie.setShadowPaint(null);
pie.setLabelGenerator(null);
pie.setCenterTextMode(CenterTextMode.VALUE);
Font font = new Font("Arial",1,30);
pie.setCenterTextFont(font);
pie.setCenterTextColor(Color.getHSBColor(222, 1, 1));
pie.setSectionDepth(0.1);
pie.setSectionOutlinesVisible(false);
pie.setSeparatorsVisible(false);
pie.setIgnoreZeroValues(false);

我正在使用 jfreechart verison 1.5.0

不清楚您的片段哪里出错了,但是这个最小的完整示例给出了预期的结果。顺便说一句,为了清楚起见,请注意使用 Font.BOLD 并使用 deriveFont() 来最大程度地减少不幸 font substitution; see also *Initial Threads*.

的风险
pie.setCenterTextMode(CenterTextMode.VALUE);
pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));

I tried pie.setCenterText("Vijay");

而不是CenterTextMode.VALUE;指定 CenterTextMode.FIXED:

pie.setCenterTextMode(CenterTextMode.FIXED);
pie.setCenterText("Vijay");

The above code is not setting any value if the first dataset value is zero.

正确。 RingPlot::drawItem() 忽略中心文本,除非值超过渲染阈值;您可以指定一个通过阈值但在格式化时正确显示的值:

dataset.setValue("Critical", RingPlot.DEFAULT_MINIMUM_ARC_ANGLE_TO_DRAW);

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CenterTextMode;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.general.DefaultPieDataset;

/**
 * @see 
 * @see 
 */
public class TestRing {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Critical", Integer.valueOf(42));
        dataset.setValue("Important", Integer.valueOf(21));
        dataset.setValue("Moderate", Integer.valueOf(7));
        dataset.setValue("Low", Integer.valueOf(3));
        JFreeChart chart = ChartFactory.createRingChart(
            "Test", dataset, false, true, false);
        RingPlot pie = (RingPlot) chart.getPlot();
        pie.setSimpleLabels(true);
        pie.setCenterTextMode(CenterTextMode.VALUE);
        pie.setCenterTextFont(pie.getCenterTextFont().deriveFont(Font.BOLD, 30f));
        pie.setCenterTextColor(Color.getHSBColor(0, 1, 1));
        f.add(new ChartPanel(chart){
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 400);
            }
        });
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new TestRing()::display);
    }
}