2017-10-06 6 views
1

Ich erstelle Donut-Diagramm mit Jfreechart. Ich möchte die Trennlinie entfernen (dh Linie zwischen grünem und weißem Bereich) - Diese Linie überschreitet den Diagrammteil. Ich muss das auf die Breite beschränken.Wie Trennlinie in Jfree Diagramm-Donut-Diagramm zu entfernen

Unten ist die tatsächliche und erwartete Chart: enter image description here

In diesem Bild hinzugefügt Sie deutlich den extented Abschnitt Bruchlinie außerhalb des Diagramms pie sehen (in blauem Kreis markiert).. Ich muss diese verlängerte Linie loswerden, die Schnittlinie sollte nicht über den eigentlichen Kuchenbereich hinausgehen.

Irgendwelche helfen mir, diese zu erreichen.

Unten ist der Code ich benutze:

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

Ihr Beispiel nicht kompiliert, und Ihr Aufruf von 'setSectionOutlinePaint()' ist veraltet; Bitte [bearbeiten] Sie Ihre Frage entsprechend. Stellen Sie außerdem das Copyright wieder her und zitieren Sie das [Original] (http://www.jfree.org/jfreechart/samples.html). – trashgod

Antwort

3

Die beobachteten Linien sind die sogenannten „Separator“ Linien. RingPlot verfügt über mehrere Methoden, um sie zu steuern; Unter ihnen finden Sie unter setSeparatorsVisible(boolean).

Durch Aufruf von plot.setSeparatorsVisible(false) in Ihrer Methode createChart() können Sie diese Zeilen ausblenden.

image

Verwandte Themen