JFreeChart条形图自定义颜色



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

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

我不确定这是否是自定义颜色的正确方法。基本上,我不知道GradientPaint是否是正确的选择。如果是,有人能让我知道我如何编辑这段代码,使其自定义的颜色,而不是蓝色?

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

  • 色相:142
  • 坐:109
  • 亮度:126
  • 红:79
  • 绿:129
  • 蓝色:189

有了这个方法可以自定义图表的颜色吗?

我用jfreechart编码已经有一段时间了。不过,如果我没记错的话,这是我写的用来改变条形图的代码;)。

    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。你可以在那里找到所有的参考文献和样本。但是,如果可以的话,跳到JavaFX,我强烈推荐它,使用jfreechart是痛苦的。说实话。在javafx中实现图表很容易,而且看起来更好;)

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;
    }
}

使用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;
   }
}

我认为最简单的方法是使用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));

最新更新