JFreeChart在不同区域的不同颜色为同一dataSeries

JFreeChart我试图根据y值为XY线图/曲线的不同区域着色。 我正在覆盖XYLineAndShapeRenderergetItemPaint(int row, int col) ,但是我不确定它如何处理x s之间的线的着色,因为itemPaintx上获得itemPaint (整数值)。

 final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer() { @Override @Override public Paint getItemPaint(int row, int col) { System.out.println(col+","+dataset.getY(row, col)); double y=dataset.getYValue(row, col); if(y<=3)return ColorUtil.hex2Rgb("#7DD2F7"); if(y<=4)return ColorUtil.hex2Rgb("#9BCB3B"); if(y<=5)return ColorUtil.hex2Rgb("#FFF100"); if(y<=6)return ColorUtil.hex2Rgb("#FAA419"); if(y<=10)return ColorUtil.hex2Rgb("#ED1B24"); //getPlot().getDataset(col). return super.getItemPaint(row,col); } } 

看起来行之间着色的处理是在drawFirstPassShape实现的

线条颜色似乎基于前一点

在此处输入图像描述

XYLineAndShapeRenderer此修改使用渐变填充来混合线条颜色。

 XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(){ @Override public Paint getItemPaint(int row, int col) { Paint cpaint = getItemColor(row, col); if (cpaint == null) { cpaint = super.getItemPaint(row, col); } return cpaint; } public Color getItemColor(int row, int col) { System.out.println(col + "," + dataset.getY(row, col)); double y = dataset.getYValue(row, col); if(y<=3) return Color.black; if(y<=4) return Color.green;; if(y<=5) return Color.red;; if(y<=6) return Color.yellow;; if(y<=10) return Color.orange;; return null; } @Override protected void drawFirstPassShape(Graphics2D g2, int pass, int series, int item, Shape shape) { g2.setStroke(getItemStroke(series, item)); Color c1 = getItemColor(series, item); Color c2 = getItemColor(series, item - 1); GradientPaint linePaint = new GradientPaint(0, 0, c1, 0, 300, c2); g2.setPaint(linePaint); g2.draw(shape); } }; 

在此处输入图像描述

我删除了ColorUtil.hex2Rgb因为我无法访问该类/方法。 您可能需要修改GradientPaint以考虑点之间的距离/渐变。