[英]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组合绘图时,注释会与背景和网格线合并。 因此出现以下结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.