2011-07-06 12 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)極プロットで同様の図形を描くにはどうすればよいですか? Arc2Dに関する重要な事は、境界の矩形である

おかげ

答えて

3
  1. 。半円弧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

この[example](http://stackoverflow.com/questions/6797012/jfreechart-series-tool-tip-above-shape-annotation/6802375#6802375)も参照してください。 – trashgod

関連する問題