JFreeChart XYAreaChart系列颜色叠加显示异常问题咨询
问题原因
JFreeChart的XYAreaRenderer默认使用半透明效果填充区域,上层黑色系列的半透明填充和下层红色区域叠加,就会呈现红黑混合的过渡色,并非颜色设置错误。
解决方法
直接修改渲染器的透明度配置,将填充设置为完全不透明即可,你只需要在原有渲染器配置代码中新增一行透明度设置:
XYAreaRenderer movingAverageRenderer = new XYAreaRenderer(); // 新增:设置填充完全不透明,取值范围0.0f(完全透明)~1.0f(完全不透明) movingAverageRenderer.setAlpha(1.0f); movingAverageRenderer.setUseFillPaint(false); movingAverageRenderer.setSeriesPaint(0, Color.red); movingAverageRenderer.setSeriesPaint(1, Color.black); plot.setRenderer(movingAverageRenderer);
如果修改后仍存在色差,可以开启独立填充色配置,分别指定每个系列的边框和填充颜色,修改代码如下:
XYAreaRenderer movingAverageRenderer = new XYAreaRenderer(); movingAverageRenderer.setUseFillPaint(true); // 配置系列0(红色) movingAverageRenderer.setSeriesPaint(0, Color.red); movingAverageRenderer.setSeriesFillPaint(0, Color.red); // 配置系列1(黑色) movingAverageRenderer.setSeriesPaint(1, Color.black); movingAverageRenderer.setSeriesFillPaint(1, Color.black); // 保证完全不透明 movingAverageRenderer.setAlpha(1.0f); plot.setRenderer(movingAverageRenderer);
可选调整
如果你需要修改系列的堆叠层级,可以调整绘制顺序:
- 默认按系列索引从小到大绘制,索引值大的系列会覆盖在上方
- 如需颠倒顺序,可添加代码:
plot.setSeriesRenderingOrder(SeriesRenderingOrder.REVERSE);
内容的提问来源于stack exchange,提问作者Клим
相关产品推荐
相关产品推荐

