2017-10-06 1 views
1

Jfreechart를 사용하여 도넛 형 차트를 만듭니다. 구분선을 제거하고 싶습니다. (녹색 부분과 흰색 부분 사이의 ie.line) -이 부분은 차트 부분을 초과합니다. 나는 그 폭을 차트로 만 제한해야합니다. .이에 enter image description herejfree 차트 - 도넛 형 차트에서 구분선을 제거하는 방법

이 차트 파이 (파란색 원으로 표시) 외부 extented 구역 나누기 라인을 명확하게 볼 수있는 이미지를 추가 :

아래는 실제 예상도이다. 나는 그 확장 된 라인을 없애고, 섹션 브레이크 라인은 실제 파이 영역을 넘어서는 안된다.

이 중 어느 하나를 달성하는 데 도움이됩니다.

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); 
    } 
} 
+0

및 setSectionOutlinePaint'당신의 호출()'되지 않습니다; 그에 따라 귀하의 질문을 [편집]하십시오. 또한 저작권을 복원하고 [원본] (http://www.jfree.org/jfreechart/samples.html)을 인용하십시오. – trashgod

답변

3

관찰 라인이 소위 "분리"라인은 다음과 같습니다 아래

내가 사용하고 코드입니다. RingPlot에는 여러 가지 방법이 있습니다. 그들 사이에,보십시오 setSeparatorsVisible(boolean).

createChart() 메서드에서 plot.setSeparatorsVisible(false)을 호출하면 해당 줄을 숨길 수 있습니다.

image

귀하의 예제는 컴파일되지 않습니다
관련 문제