java - JFreechart多边形外填充颜色

标签 java jfreechart

我在图表上创建了多边形注释,并且想知道如何仅在绘制的多边形外部使用颜色填充图表。我正在使用 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);

通过异或组合绘图,注释以某种方式与背景和网格线合并。于是出现如下结果:

simplegraph

关于java - JFreechart多边形外填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854680/

相关文章:

Android 上的 Java 原始类型位大小

java - 正则表达式 - 匹配具有零个或一个空格的字符串

java - JFreeChart导入错误

java - 是否可以在 JFreeChart 中预定义 Y 轴的最大值?

JFreeChart 结合时间序列的 XY 图

java - jFreechart点点击时消失

javascript - java 和 javascript - 访问 map

java - Java 中的字符串格式化

java - 如何在JFreeChart上的X轴值上显示几个值?

java - 以编程方式登录网站