JFreeChart在同一数据系列的不同区域中使用不同的颜色

JFreeChart我试图基于y值为XY折线图/曲线的不同区域着色。我重写XYLineAndShapeRenderer

getItemPaint(int row, int col),但我不知道它是如何处理

之间的线色x小号,因为它只是让itemPaint上x(整数值)。

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以考虑

点之间的距离/渐变。

以上是 JFreeChart在同一数据系列的不同区域中使用不同的颜色 的全部内容, 来源链接: utcz.com/qa/401656.html

回到顶部