繁体   English   中英

JFreechart填充多边形外部的颜色

[英]JFreechart fill color outside polygon

我在图表上创建了一个多边形注释,并且想知道如何仅在绘制的多边形之外用颜色填充图表。 我正在使用Jfreechart 1.0.17。

我现在这样做:

Color plotBackground = (Color) plot.getBackgroundPaint();
plot.setBackgroundPaint(new Color(0xff0000));
XYLineAndShapeRenderer renderer
   = (XYLineAndShapeRenderer) plot.getRenderer();

XYPolygonAnnotation a = new XYPolygonAnnotation(new double[] {2.0,
   5.0, 2.5, 8.0, 3.0, 5.0, 2.5, 2.0}, null, null,
   new Color(plotBackground.getRed(), plotBackground.getGreen(),
             plotBackground.getBlue(), 255));

但它并不是我想要的,我们无法通过这种方式看到网格线。

这是可能的解决方案:

    Rectangle2D r2d = new Rectangle2D.Double(plot.getQuadrantOrigin().getX(),
                                             plot.getQuadrantOrigin().getY(),
                                             3.2, 9);
    Area a1 = new Area(r2d);
    Path2D.Float p = new Path2D.Float();
    p.moveTo(2.0, 5.0);
    p.lineTo(2.5, 8.0);
    p.lineTo(3.0, 5.0);
    p.lineTo(2.5, 2.0);
    p.closePath();
    Area a2 = new Area(p);
    a1.subtract(a2);

    XYShapeAnnotation a = new XYShapeAnnotation(a1, new BasicStroke(), 
                                                new Color(0xff0000), 
                                                new Color(0xff0000));
    renderer.addAnnotation(a, Layer.BACKGROUND);

查看jfreecharts源代码时,注释总是在绘制网格线后绘制。 所以似乎没有必要在网格线之前绘制它们。 我会尝试XOR模式绘图。

XYPolygonAnnotation a = new XYPolygonAnnotation(new double[]{2.0,
            5.0, 2.5, 8.0, 3.0, 5.0, 2.5, 2.0}, null, null,
                new Color(plotBackground.getRed(), plotBackground.getGreen(),
             plotBackground.getBlue(), 255)) {

            @Override
            public void draw(Graphics2D g2, XYPlot plot, Rectangle2D dataArea, ValueAxis domainAxis, ValueAxis rangeAxis, int rendererIndex, PlotRenderingInfo info) {
                Graphics2D g22 = (Graphics2D) g2.create();
                g22.setXORMode(new Color(0xff0000));
                super.draw(g22, plot, dataArea, domainAxis, rangeAxis, rendererIndex, info); 
            }
        };

renderer.addAnnotation(a,  Layer.BACKGROUND);

使用xor组合绘图时,注释会与背景和网格线合并。 因此出现以下结果:

SimpleGraph所使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM