当前位置: 首页 > 面试题库 >

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

郦翰学
2023-03-14
问题内容

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以考虑
点之间的距离/渐变。



 类似资料:
  • 我从S3读取PARQUET文件时出错,原因是“final_height”列在同一个分区中有String和Double类型。供参考,拼花文件中有20多列。我得到的错误是: 当"part1.gz.parquet"有X列的字符串数据,而"part2.gz.parquet"在同一列中有双精度数据时,找到了一些解决方案。但是当在同一分区中发现同一列中的不同类型时,它们不起作用。 试: 使用合并模式和推断模式

  • 问题内容: 我有一个具有多年温度记录的温度文件,格式如下: 每年的记录数量和时间不同,因此熊猫的datetimeindices都不同。 我想在同一图中绘制不同年份的数据以进行比较。X轴为1月至12月,Y轴为温度。我应该怎么做呢? 问题答案: 尽管Chang的答案说明了如何在同一图形上多次绘制,但是在这种情况下,使用a和ing可能会更好: (假设您已经在数据框中使用了日期时间索引) 现在很容易绘制(

  • 问题内容: 我是Oracle的新手。我有一个Oracle表有三列:,和。在第三列中的行具有值,或 。 我想使用count运行查询,以显示可维修的数量,正在维修的数量,针对每个项目类别的谴责数量。 我想运行类似的东西: 我无法在计数内运行内部查询。 这是我希望结果集看起来像的样子: 问题答案: 您可以在COUNT函数中使用CASE或DECODE语句。 输出:

  • 问题内容: 我有这样的CSS声明: 这里的font1是嵌入式的eot / ttf字体,但问题是该字体比其他字体要小,所以我想为此字体(font1)使用不同的字体大小(1.8em)。所有其他字体(font2,font3)保持不变。 问题是,我无法验证用户的浏览器是使用font1,font2还是font3。是否有任何CSS声明允许不同家族使用不同的字体大小? 谢谢。 问题答案: 这里 是 一个办法做到

  • 问题内容: 我运行foo.com。我在foo.com中有两个不同的应用程序:一个是foo.com/bar,另一个是foo.com/example。我使用会话来跟踪有关用户登录的信息,但是如果用户从foo.com/bar转到foo.com/example,则foo.com/example会看到用户从foo.com/启动的会话并使用该信息。我的问题是,如何同时为每个目录进行两个不同的会话? 问题答案:

  • 5.3 不同的颜色 CGDB支持一些颜色,取决于您的终端支持多少种颜色。下表是一个CGDB所提供的颜色的表格。标题为NR-16的列表示终端至少支持16种颜色。标题为NR-8的列表示终端至少支持8种颜色。每种颜色对应的整数数值表示了被传入curse函数init_pair()的数值,该函数用来使curse创建一种新的颜色。 COLOR NAME NR-16 NR-8 NR-8 bold attribu