我在使用JFreeChart RingPlot时遇到了一些麻烦。我已经设法将标签放在我的图表中,但我无法改变他们的位置。我现在在哪里;
我需要将实验室移近图表的边缘,以便我可以降低剖面深度并获得更好的环形外观。到目前为止,我尝试使用setSimpleLabelOffset和setLabelGap方法,但效果不佳。
这是我的代码;
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);
知道我怎么能实现这个目标? 提前谢谢。
编辑:感谢@trashgod的回复,但是我想我的环境出了问题。我复制并粘贴了你上面提到的整个代码,我得到的是:
答案 0 :(得分:0)
RectangleInsets
标签的默认PiePlot
插入相对到地图的pieArea
:
this.simpleLabelOffset = new RectangleInsets(UnitType.RELATIVE, 0.18, 0.18, 0.18, 0.18);
下面的示例将插入内容减半,并相应地更改剖面深度:
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测试:
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);
}
}