【问题标题】:How do I apply a color to a single bar of my single series graph?如何将颜色应用于我的单系列图表的单个条形?
【发布时间】:2011-03-29 09:52:59
【问题描述】:

我是 JFreeChart 的新手,我想看看什么动作做什么。

在我的图表中,我只有一个系列,我想 - 根据值 - 为条形设置不同的颜色。例如:0-20 -> RED, 20-80 -> YELLOW, 80-100 -> GREEN

CategoryPlot plot = chart.getCategoryPlot();
CategoryDataset dataset = plot.getDataset(0);

Number value = dataset.getValue(dataset.getRowKey(0), dataset.getColumnKey(0));
Double val = value.doubleValue();

if (val <= 20.0) {
    BarRenderer renderer = (BarRenderer) plot.getRenderer();
    Paint tmp = renderer.getItemPaint(row, column);

    /*
    ** Help Please
    */      
}

return chart;

这是我到达的地方,我被困在这里,不知道该去哪里。我在文档中看到 Paint 是一个接口,但实现该接口的类都没有提供 setXXX() 方法。所以,我的两个问题是:

  • 如何为单个 Bar 设置颜色?
  • 如何将它应用到我的图表中?

【问题讨论】:

    标签: java jfreechart paint


    【解决方案1】:

    您需要创建自己的BarRenderer 子类并覆盖getItemPaint()。与其根据列选择颜色,不如根据您的值选择颜色。下面是一个大纲,展示了现有的 BarRenderer 是如何工作的。

    plot.setRenderer(new MyRender());
    ...
    class MyRender extends BarRenderer {
    
        @Override
        public Paint getItemPaint(int row, int col) {
            System.out.println(row + " " + col + " " + super.getItemPaint(row, col));
            return super.getItemPaint(row, col);
        }
    }
    

    【讨论】:

    • 感谢您的回答。我有一个问题,getItemPaint 应该返回给我一个 Paint 类,但是如果我想为定义 (row, col) 属性设置颜色,getItemPaint 中是否仍然会发生?
    • AFAIK,是的; API 建议覆盖 getItemPaint() “如果您需要不同的行为”。点击getItemPaint()lookupSeriesPaint() 链接查看默认实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多