JFreeChart-环形图简单标签定位 [英] JFreeChart - Ring Plot Simple Label Positioning
问题描述
在使用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屋!