JFreeChart-环形图简单标签定位 [英] JFreeChart - Ring Plot Simple Label Positioning

查看:369
本文介绍了JFreeChart-环形图简单标签定位的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用JFreeChart RingPlot时遇到一些麻烦.我设法将标签放入图表中,但是我无法根据需要更改它们的位置.我现在在这里;

I'm having some trouble while working on JFreeChart RingPlot. I've managed to put labels inside my chart, yet I can't change their positions as I want. Here where am I right now;

我需要将实验移至靠近图表边缘的位置,以便降低剖面深度并具有更好的环形外观.到目前为止,我尝试使用setSimpleLabelOffset和setLabelGap方法,但效果不佳.

I need to move the labes closer to the edges of the chart so that I can lower the section depth and have a better ring look. So far, I tried to play with setSimpleLabelOffset and setLabelGap methods but didn't work well.

这是我的代码;

    DefaultPieDataset dataset = new DefaultPieDataset();

    dataset.setValue("Critical", new Integer(5));
    dataset.setValue("Important", new Integer(20));
    dataset.setValue("Moderate", new Integer(19));
    dataset.setValue("Low", new Integer(5));


    JFreeChart chart = ChartFactory.createRingChart("", dataset, false, true, false);

    RingPlot pie = (RingPlot) chart.getPlot();

    pie.setBackgroundPaint(Color.WHITE);
    pie.setOutlineVisible(false);
    pie.setShadowPaint(null);

    pie.setSimpleLabels(true);
    pie.setLabelGenerator(new StandardPieSectionLabelGenerator("{1}"));
    //pie.setSimpleLabelOffset(new RectangleInsets(1, 1, 1, 1));
    //pie.setLabelGap(0.05);
    //pie.setLabelPadding(new RectangleInsets(100, 5, 10, 5));
    pie.setLabelBackgroundPaint(null);
    pie.setLabelOutlinePaint(null);
    pie.setLabelShadowPaint(null);


    pie.setSectionDepth(0.50);
    pie.setSectionOutlinesVisible(false);
    pie.setSeparatorsVisible(false);

    pie.setIgnoreZeroValues(true);

任何想法我该如何实现? 预先感谢.

Any idea how may I achieve this? Thanks in advance.

感谢@trashgod的答复,但我想我的环境有问题.我复制并粘贴了上面提供的整个代码,得到的是:

Thanks for the response @trashgod, but something is wrong with my environment iI guess. I copied and pasted the whole code you presented above and what I get is this:

推荐答案

PiePlot标签的默认RectangleInsets是相对于图的pieArea的相对嵌入 :

The default RectangleInsets for PiePlot labels are inset relative to the plot's pieArea:

this.simpleLabelOffset = new RectangleInsets(UnitType.RELATIVE, 0.18, 0.18, 0.18, 0.18);

下面的示例将插图切成两半,并相应地更改切片深度:

The example below cuts the insets in half and changes the section depth accordingly:

 pie.setSimpleLabelOffset(new RectangleInsets(UnitType.RELATIVE, 0.09, 0.09, 0.09, 0.09));
 pie.setSectionDepth(0.33);

jfreechart-1.0.19.jar and jcommon-1.0.23.jar,Java 1.8.0_92,Mac OS X 10.11.5,Windows 10测试:

As tested with jfreechart-1.0.19.jar and jcommon-1.0.23.jar, Java 1.8.0_92, Mac OS X 10.11.5, Windows 10:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleInsets;
import org.jfree.util.UnitType;

/**
 * @see http://stackoverflow.com/a/37414338/230513
 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Critical", new Integer(5));
        dataset.setValue("Important", new Integer(20));
        dataset.setValue("Moderate", new Integer(19));
        dataset.setValue("Low", new Integer(5));
        JFreeChart chart = ChartFactory.createRingChart("", dataset, false, true, false);
        RingPlot pie = (RingPlot) chart.getPlot();
        pie.setBackgroundPaint(Color.WHITE);
        pie.setOutlineVisible(false);
        pie.setShadowPaint(null);
        pie.setSimpleLabels(true);
        pie.setLabelGenerator(new StandardPieSectionLabelGenerator("{1}"));
        pie.setSimpleLabelOffset(new RectangleInsets(
            UnitType.RELATIVE, 0.09, 0.09, 0.09, 0.09));
        pie.setLabelBackgroundPaint(null);
        pie.setLabelOutlinePaint(null);
        pie.setLabelShadowPaint(null);
        pie.setSectionDepth(0.33);
        pie.setSectionOutlinesVisible(false);
        pie.setSeparatorsVisible(false);
        pie.setIgnoreZeroValues(true);
        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 Test()::display);
    }
}

这篇关于JFreeChart-环形图简单标签定位的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆