2014-02-18 89 views
0

我在我的圖表上創建了一個多邊形批註,並想知道如何在繪製多邊形之外僅用顏色填充圖表。我使用Jfreechart 1.0.17。JFreechart在多邊形外部填充顏色

我做這樣的時刻:

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); 
+0

到目前爲止你有什麼代碼? – wumpz

+0

目前我正在使用JFreeChart demo的代碼XYPolygonAnnotationDemo1 – jerome

回答

1

展望jfreecharts源代碼的網格線都畫後的註釋總是畫。因此,似乎沒有可能在網格線之前繪製它們。 我會給異或模式繪圖一個嘗試。

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

隨着異或合併繪製註釋是somekind與背景和網格線合併。所以出現以下結果:

simplegraph