2011-07-06 3 views
1

질문이 2 개 있습니다.JFreechart 차트에 호 그리기

1) 모양 주석을 사용하여 XYplot에 호를 그리려합니다. XYLine 주석을 사용하여 선을 그리고 선이 끝나는 곳에서 호를 시작하겠습니다. 내가 매개 변수와 함께 몇 가지 문제가 있습니다. 나는 호의 높이가 17, 너비 44, 그리고 지점 (3.0, 17) (이것은 라인 끝나는 곳)에서 시작하고 싶습니다. 그러나 아래 코드는 작동하지 않습니다. 누군가 코드를 잘못 읽었습니까?

Arc2D.Double arc = new Arc2D.Double(3.0, 
         16.9, 
         44.0, 
         17.04, 
         180.0, 
         180.0, 
         Arc2D.OPEN 
       ); 
plot.addAnnotation(new XYShapeAnnotation(arc, 
         new BasicStroke(2.0f), Color.white)); 
XYLineAnnotation a1 = new XYLineAnnotation(3.0, 0.0, 3.0, 
         16.9, new BasicStroke(2.0f), Color.white); 

2) 어떻게 극좌표 플롯에 비슷한 그림을 그릴 수 있습니까?

감사

답변

3
  1. 는 중요한 것은 약 Arc2D 경계 사각형입니다. 반원 호 H 단위를 높이려면 범위는 2 * H 단위가되어야합니다.

  2. AFAIK, PolarPlot은 주석을 지원하지 않습니다.

enter image description here

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.geom.Arc2D; 
import java.util.Random; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartFrame; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.annotations.XYLineAnnotation; 
import org.jfree.chart.annotations.XYShapeAnnotation; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.data.xy.XYSeries; 
import org.jfree.data.xy.XYSeriesCollection; 

/** @see http://stackoverflow.com/questions/6604211 */ 
public class ArcTest { 

    private static final Random r = new Random(); 
    private static final double PI = 180d; 
    private static final int X = 3; 
    private static final int Y = 0; 
    private static final int W = 44; 
    private static final int H = 17; 

    public static void main(String[] args) { 
     JFreeChart chart = ChartFactory.createXYLineChart(
      "ArcTest", "X", "Y", createDataset(), 
      PlotOrientation.VERTICAL, true, true, false); 
     XYPlot plot = chart.getXYPlot(); 
     XYLineAnnotation line = new XYLineAnnotation(
      X, Y, X, H, new BasicStroke(2f), Color.blue); 
     plot.addAnnotation(line); 
     Arc2D.Double arc = new Arc2D.Double(
      X, Y, W, 2 * H, PI, PI, Arc2D.OPEN); 
     plot.addAnnotation(new XYShapeAnnotation(arc, 
      new BasicStroke(2.0f), Color.blue)); 
     ChartFrame frame = new ChartFrame("First", chart); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    private static XYDataset createDataset() { 
     XYSeriesCollection result = new XYSeriesCollection(); 
     XYSeries series = new XYSeries("ArcTest"); 
     series.add(0, 0); 
     series.add(W, W); 
     result.addSeries(series); 
     return result; 
    } 
} 
+0

편리하게, 당신은 ['Shape']를 구현하는 모든 클래스 (http://download.oracle.com/javase/6/docs/api/java/을 사용할 수 있습니다 awt/Shape.html) 인터페이스. – trashgod

+0

이 [예제] (http://stackoverflow.com/questions/6797012/jfreechart-series-tool-tip-above-shape-annotation/6802375#6802375)도 참조하십시오. – trashgod