【问题标题】:JFreechart draw arc on chartJFreechart在图表上绘制弧线
【发布时间】:2011-07-06 23:29:16
【问题描述】:

我有 2 个问题

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)如何在极坐标图上画出类似的图形?

谢谢

【问题讨论】:

    标签: annotations draw jfreechart geometric-arc


    【解决方案1】:
    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;
        }
    }
    

    【讨论】:

    • 方便地,您可以使用任何实现Shape 接口的类。
    • 另见example
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多