gpt4 book ai didi

java - JFreechart多边形外填充颜色

转载 作者:行者123 更新时间:2023-12-02 06:11:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com