我在图表上创建了多边形注释,并且想知道如何仅在绘制的多边形外部使用颜色填充图表。我正在使用 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);
通过异或组合绘图,注释以某种方式与背景和网格线合并。于是出现如下结果:
关于java - JFreechart多边形外填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854680/