JFreeChart different colors in different regions for the same dataSeries

后端 未结 1 1400
时光说笑
时光说笑 2020-12-10 09:12

In JFreeChart I\'m trying to color different regions of an XY line chart/curve based on y value. I\'m overriding the XYLineAndShapeRenderer<

相关标签:
1条回答
  • 2020-12-10 09:19

    It looks like the handling of the colouring between lines is implemented in drawFirstPassShape

    The line colour appears to be based on the preceding point

    enter image description here

    This modification to your XYLineAndShapeRenderer uses a gradient fill to blend the line colour.

    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);
        }
    };
    

    enter image description here

    I've removed ColorUtil.hex2Rgb as I don't have access to that class/method. You may want to modify GradientPaint to take account of the distance/gradient between points.

    0 讨论(0)
提交回复
热议问题