JFreeChart在不同区域中为不同的数据系列提供不同的颜色

时间:2012-08-15 00:58:12

标签: java jfreechart renderer

JFreeChart我试图根据y值为XY线图/曲线的不同区域着色。我正在覆盖XYLineAndShapeRenderer的{​​{1}},但是我不知道它是如何处理getItemPaint(int row, int col)之间的线条着色的,因为它只是x itemPaint(整数值)。

x

1 个答案:

答案 0 :(得分:7)

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

中实现的

线条颜色似乎基于前一点

enter image description here

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

enter image description here

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