Search code examples
jfreechartireportstackedbarseries

How to set different colors to the bars in stacked bar chart in ireport?


I need to set a unique color to each bar in the stacked bar chart. Whatever the color I see in one bar it shouldn't be repeated in any other bar or any other stack.

For example: I have 5 bars in the report. Each bar has 3 different stacks. I want to apply a red related colors to the first bar and its stacks. Second bar should have blue related colors. etc.. It is showed in the attached image. The image shows a very basic requirement what we want. Just created using a normal ms paint. Stacked Bar MS Paint Image


Solution

  • You can override the getItemPaint() method of StackedBarRenderer() to return the desired color. You can use getHSBColor() to construct related colors by varying the brightness or saturation for a given hue.

    Addendum: The example below will print out the row, column and color for each item. You can use the result as a guide to which custom color you want to return. See BarChartDemo1 for a sample dataset.

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