JFreechart在图表上绘制弧线

我有2个问题

1)我正在尝试使用形状注释在XY图上绘制一条弧线。 我使用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)如何在极坐标图上绘制类似的graphics?

谢谢

  1. 关于Arc2D的关键是边界矩形。 为了使半弧H单元高,边界必须是2 * H单位高。

  2. AFAIK, PolarPlot不支持注释。

在这里输入图像描述

 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; } }