java - 如何删除 jfree chart- donut chart 中的分隔线

标签 java jfreechart

我正在使用 Jfreechart 创建圆环图。我想删除分隔线(即绿色部分和白色部分之间的线)- 这条线超出了图表部分。我需要将其限制为图表宽度。

下面是实际和预期的图表: enter image description here

在这张添加的图片中,您可以清楚地看到饼图外的扩展分节线。(以蓝色圆圈标记)。我需要摆脱那条延长线,分节线不应超出实际的饼图区域。

任何人都可以帮助我实现这些目标。

下面是我使用的代码:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlotState;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.text.TextUtilities;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.TextAnchor;
public class DonutChart extends ApplicationFrame {

    private static final long serialVersionUID = 1L;

    static class CustomRingPlot extends RingPlot {

        private Font centerTextFont;    
        private Color centerTextColor;

        public CustomRingPlot(PieDataset dataset) {
            super(dataset);
            this.centerTextFont = new Font(Font.SANS_SERIF, Font.BOLD, 24);
            this.centerTextColor = Color.BLACK;
        }

        @Override
        protected void drawItem(Graphics2D g2, int section,
                Rectangle2D dataArea, PiePlotState state, int currentPass) {
            super.drawItem(g2, section, dataArea, state, currentPass);
            if (currentPass == 1 && section == 0) {
                Number n = this.getDataset().getValue(section);
                g2.setFont(this.centerTextFont);
                g2.setPaint(this.centerTextColor);
                TextUtilities.drawAlignedString(n.toString(), g2,
                        (float) dataArea.getCenterX(),
                        (float) dataArea.getCenterY(),
                        TextAnchor.CENTER);
            }
        }
    }

    public DonutChart(String title) {
        super(title);
        setContentPane(createDemoPanel());
    }

    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("A", 71);
        dataset.setValue("B", 29);
        return dataset;
    }

    private static JFreeChart createChart(PieDataset dataset) {
        CustomRingPlot plot = new CustomRingPlot(dataset);
        JFreeChart chart = new JFreeChart("",
                JFreeChart.DEFAULT_TITLE_FONT, plot, false);
        plot.setBackgroundPaint(null);
        plot.setOutlineVisible(false);
        plot.setLabelGenerator(null);
        plot.setSectionPaint("A", Color.RED);
        plot.setSectionPaint("B", Color.WHITE);
        plot.setSectionDepth(0.5);
        plot.setSectionOutlinesVisible(true);
        plot.setSectionOutlinePaint(Color.RED);
        plot.setShadowPaint(null);
        return chart;
    }

    public static JPanel createDemoPanel() {
        JFreeChart chart = createChart(createDataset());
        chart.setPadding(new RectangleInsets(4, 8, 2, 2));
        ChartPanel panel = new ChartPanel(chart);
        panel.setMouseWheelEnabled(true);
        panel.setPreferredSize(new Dimension(600, 300));
        return panel;
    }

    public static void main(String[] args) {
        RingChartDemo1 demo = new RingChartDemo1("JFreeChart: Ring Chart Demo 1");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
}

最佳答案

观察到的线是所谓的“分隔线”。 RingPlot有几种方法来控制它们;其中,参见 setSeparatorsVisible(boolean) .

通过在您的方法 createChart() 中调用 plot.setSeparatorsVisible(false),您可以隐藏这些线。

image

关于java - 如何删除 jfree chart- donut chart 中的分隔线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46599187/

相关文章:

java - 使用 subList 的 ConcurrentModificationException?

java - 无法在h2内存数据库中插入数据

java - CardLayout 与 JFreeChart 切换不起作用

java - 如何在组件绘制时创建 "please wait"Swing 对话框

java - 在 JFreeChart 中使用 JTextField 更新正态分布图

Java:对 CMS 垃圾收集器感到困惑

java - 主线程退出的多线程,其他线程是否有可能无限运行

java - Java中的最短路径实现

java - JFreeChart 不会在线程上的每次迭代时显示图形?

java - Jfree 图表 - 在浏览器中包含平移功能