4

値にJFreeChart基づいて、XY 折れ線グラフ/曲線のさまざまな領域に色を付けようとしていyます。私は s をオーバーライドしてXYLineAndShapeRendererい ますが、 (整数値)のみを取得しているため、 sgetItemPaint(int row, int col)間の線の色付けをどのように処理するかはわかりません。xitemPaintx

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

1 に答える 1

7

行間の色付けの処理が実装されているようです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ポイント間の距離/勾配を考慮して変更することができます。

于 2012-08-15T08:14:24.830 に答える