Java JFreeChart条形图自定义颜色?
我正在使用java中的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
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));