2016-05-23 4 views
2

У меня возникли проблемы при работе над JFreeChart RingPlot. Мне удалось установить ярлыки внутри моей диаграммы, но я не могу изменить свои позиции, как я хочу. Вот где я сейчас;JFreeChart - Ring Plot Простая установка меток

enter image description here

мне нужно переместить LABES ближе к краям диаграммы, так что я могу уменьшить глубину сечения и иметь лучшее кольцо вид. До сих пор я пытался играть с методами 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, но что-то не так с моей средой, я предполагаю. Я скопировать и вставить весь код, представленный выше, и что я получаю это:

image

ответ

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); 

image

Как протестирована с 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); 
    } 
} 
+0

Какую версию '' jfreechart' и jcommon' вы используете? – trashgod

Смежные вопросы