如何使用循环更改多个椭圆的颜色(JFreeChart) [英] How to change the color of multiple ellipses using a loop (JFreeChart)

查看:77
本文介绍了如何使用循环更改多个椭圆的颜色(JFreeChart)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用如下所示的循环绘制了多个椭圆,并且使用所有椭圆均使用一种颜色的结果是完美的,但是我的目标是为每个椭圆着色不同的颜色.有什么方法可以让属性Color.BLUE在每次迭代中更改其值?

I have drawn multiple ellipses using a loop as shown below, and the results are perfect using one color for all the ellipses, but my target is to color each ellipse with different color. Is there any way to let the property Color.BLUE change its value in each iteration?

for (int i = 0; i < 3; i++)
{
    XYShapeAnnotation unitCircle1 = new XYShapeAnnotation(
        new Ellipse2D.Double((FinalArayOfOptpar[s][i] - Math.abs(FinalArayOfOptpar[s][i + 2])),
            (FinalArayOfOptpar[s][i + 1] - Math.abs(FinalArayOfOptpar[s][i + 3])),
            Math.abs(FinalArayOfOptpar[s][i + 2] * 2.0), Math.abs(FinalArayOfOptpar[s][i + 3] * 2.0)),
        new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER,
            10.2f), Color.BLUE);
    xyPlot.addAnnotation(unitCircle1);
}

推荐答案

将创建数十个XYShapeAnnotations ...因此创建多个XYShapeAnnotation实例将无法达到我的目的.

tens of XYShapeAnnotations will be created…so creating multiple instances of XYShapeAnnotation will not work for my purpose.

令人高兴的是,实例XYShapeAnnotation很小,在下面的示例中每个实例只有48个字节.您需要确定配置文件.

Happily, an instance XYShapeAnnotation is small—just 48 bytes each in the example below. You'll want to profile to be sure.

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.geom.Ellipse2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.XYShapeAnnotation;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @see https://stackoverflow.com/a/35236100/230513
 */
public class AnnotationTest {

    private static final BasicStroke stroke = new BasicStroke(2.0f);
    private static final int N = 16;
    private static final int S = 8;

    public static void main(String[] args) {
        EventQueue.invokeLater(new AnnotationTest()::display);
    }

    private void display() {
        XYDataset data = createDataset();
        JFreeChart chart = ChartFactory.createXYLineChart("ArcTest", "X", "Y",
            data, PlotOrientation.VERTICAL, true, true, false);
        XYPlot plot = chart.getXYPlot();
        XYLineAndShapeRenderer renderer
            = (XYLineAndShapeRenderer) plot.getRenderer();
        renderer.setBaseShapesVisible(true);
        for (int i = 0; i < N; i++) {
            double x = data.getXValue(0, i) - S / 2;
            double y = data.getYValue(0, i) - S / 2;
            Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, S, S);
            Color color = Color.getHSBColor((float) i / N, 1, 1);
            renderer.addAnnotation(new XYShapeAnnotation(ellipse, stroke, color));
        }
        ChartFrame frame = new ChartFrame("Test", chart);
        frame.pack();
        frame.setVisible(true);
    }

    private static XYDataset createDataset() {
        XYSeriesCollection result = new XYSeriesCollection();
        XYSeries series = new XYSeries("ArcTest");
        for (int i = 0; i < N; i++) {
            series.add(i * S, i * S);
        }
        result.addSeries(series);
        return result;
    }
}

这篇关于如何使用循环更改多个椭圆的颜色(JFreeChart)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆