Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFreeChart条形图自定义颜色?_Java_Swing_Charts_Jfreechart_Bar Chart - Fatal编程技术网

Java JFreeChart条形图自定义颜色?

Java JFreeChart条形图自定义颜色?,java,swing,charts,jfreechart,bar-chart,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

我正在使用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.Bud进行编码了。如果我没记错的话,这是我为更改条形图而编写的代码;)

我正在看我写的第一个应用程序的代码。我不确定它现在是否能工作

对于未来,我建议您用谷歌搜索或购买jfreechart的PDF指南。您可以在那里找到所有的参考资料和示例。如果可以,请跳到JavaFX,我强烈推荐,使用jfreechart很痛苦。老实说,在JavaFX中实现图表很简单,而且看起来更好;)

这会将所有条设置为该特定颜色。如果希望更改每行的颜色(例如,对于堆叠条形图),可以调用
dataset.getRowCount()
,dataset的类型为
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;
    }
}
for(int i=0;i
使用JfreeChart在条形图中自定义颜色

创建一个新类名为
customderer3d
或选择
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));

JavaFX很有趣。然而,这些图表所用的所有数据都来自mysql数据库。我使用jdbc连接循环遍历数据库表中的值并填充图表。javafx会有这个特性/能力吗?当然。你只需要实现它。没有简单的图表。setMyData(dataOfAnyKind);//done方法。Bud从何处获取数据并不重要。如果是文本文件、数据库、,csv文件等。首先,您必须解析它以满足您的需要或图表需要。通常,您总是在处理数据之前准备好数据。同样的逻辑适用。因此,不要害怕,选择JavaFX。使用JfreeChart,您必须做同样的工作+调整ui,这比使用JavaFX的SceneBuilder更难,fxml.Bud由您决定。@user3794422,正如您在评论中指出的。您已经从db获取了数据。所以所有的工作都完成了。现在将重点放在ui上。JavaFX比jfreechart imo更好地实现了图表。请投票支持方法
setSeriesPaint
。我感谢所有人的帮助。但我发现对我已经建立的代码final GradientPaint gp0=new GradientPaint(0.0f,0.0f,new Color(79129189),0.0f,0.0f,new Color(79129189));修正了这个问题。我对编码是新手,所以不确定这比已经提交的答案好还是坏。但这对我来说是最简单的。感谢所有回答的人。我很感激。
CategoryItemRenderer barColor = new CustomRenderer(new Paint[]{});
plot.setRenderer(barColor);
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;
   }
}
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));