1
Jfreechart를 사용하여 도넛 형 차트를 만듭니다. 구분선을 제거하고 싶습니다. (녹색 부분과 흰색 부분 사이의 ie.line) -이 부분은 차트 부분을 초과합니다. 나는 그 폭을 차트로 만 제한해야합니다. .이에 jfree 차트 - 도넛 형 차트에서 구분선을 제거하는 방법
이 차트 파이 (파란색 원으로 표시) 외부 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);
}
}
및 setSectionOutlinePaint'당신의 호출()'되지 않습니다; 그에 따라 귀하의 질문을 [편집]하십시오. 또한 저작권을 복원하고 [원본] (http://www.jfree.org/jfreechart/samples.html)을 인용하십시오. – trashgod