JFreeChart条形图自定义颜色?

时间:2014-07-03 13:44:01

标签: java swing charts jfreechart bar-chart

我在java中使用JFreeCharts来创建条形图。我的问题很简单......如何为条形图中的所有条形图选择自定义颜色?我不确定这种自定义是否会在GradientPaint中完成。我的代码确定条形颜色的一个例子是:

   final GradientPaint gp0 = new GradientPaint(
                    0.0f, 0.0f, Color.blue, 
                    0.0f, 0.0f, Color.blue
                );

我不确定这是否是自定义颜色的正确方法。基本上,我不知道GradientPaint是否是正确的去法。如果是,有人可以告诉我如何编辑此代码以使其成为自定义颜色而不是蓝色吗?

我不确定这是否有帮助,但是说自定义颜色的信息是

  • hue:142
  • 周六:109
  • 绥:126
  • 红色:79
  • 绿色:129
  • 蓝色:189

有没有办法自定义图表的颜色?

4 个答案:

答案 0 :(得分:13)

有一段时间以来我用jfreechart.Bud编码,如果我记得corectly这是我写的代码改变条形画;)。

    CategoryPlot cplot = (CategoryPlot)chart.getPlot();
    cplot.setBackgroundPaint(SystemColor.inactiveCaption);//change background color

    //set  bar chart color

    ((BarRenderer)cplot.getRenderer()).setBarPainter(new StandardBarPainter());

    BarRenderer r = (BarRenderer)chart.getCategoryPlot().getRenderer();
    r.setSeriesPaint(0, Color.blue);

我正在查看我写的第一个应用程序的代码。我不确定它现在是否可行。

未来我建议谷歌或购买PDF指南到jfreechart.You找到所有的参考和样品。如果可以的话,跳到JavaFX我强​​烈推荐它,使用jfreechart很痛苦。说实话。实践javafx中的图表很简单,看起来更好;)

答案 1 :(得分:4)

CategoryPlot plot = chart.getCategoryPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();

// set the color (r,g,b) or (r,g,b,a)
Color color = new Color(79, 129, 189);
renderer.setSeriesPaint(0, color);

这会将所有条形设置为该特定颜色。如果您希望每行更改颜色(例如,对于堆积条形图),您可以调用dataset.getRowCount(),数据集的类型为CategoryDataset,以返回所涉及的行数对于条形图的每一列。然后,您可以根据行的索引在renderer.setSeriesPaint()调用中索引系列。

for (int i = 0; i < dataset.getRowCount(); i++){
    switch (i) {
    case 0:
        // red
        color = new Color(255, 0, 0);
        break;
    case 1:
        // blue
        color = new Color(0, 0, 255);
        break;
    default:
        // green
        color = new Color(0, 255, 0);
        break;
    }
}

答案 2 :(得分:1)

  

条形图中的自定义颜色使用 JfreeChart

CategoryItemRenderer barColor = new CustomRenderer(new Paint[]{});
plot.setRenderer(barColor);

创建新的班级名称为CustomRenderer extends BarRenderer3D,或者您选择BarRenderer

class CustomRenderer extends BarRenderer3D {

    private Paint[] colors;
    public CustomRenderer(final Paint[] colors) {
        this.colors = colors;
    }

    public Paint getItemPaint(final int row, final int column) {
        if(column==0)
            return Color.blue;
        else if(column==1)
            return Color.CYAN;
        else  
            return Color.RED;
   }
}

答案 3 :(得分:0)

我认为最简单的方法是使用getRenderer().setSeriesPaint(index, color)方法。

因此,作为示例,您可以尝试下面的代码,将其分为3个条形图。

JFreeChart barChart = ChartFactory.createBarChart(
                "Bar Chart Titke",
                "Category", "Score",
                dataset,PlotOrientation.HORIZONTAL,
                true, true, false);

        CategoryPlot plot = barChart.getCategoryPlot();
        plot.getRenderer().setSeriesPaint(0, new Color(128, 0, 0));
        plot.getRenderer().setSeriesPaint(1, new Color(0, 0, 255));
        plot.getRenderer().setSeriesPaint(2, new Color(0, 230, 255));