簡體   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