我在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));