可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
my bar chart is always drawn with a gradient color by default. I just want a simple color without any styled effects.
Can anyone help ?
Code:
final JFreeChart chart = ChartFactory.createBarChart( "", // chart title xLabel, // domain axis label yLabel, // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend false, // tooltips? false // URLs? ); final CategoryPlot plot = chart.getCategoryPlot(); // SOMETHING HAS TO BE DONE HERE showChart(chart); // Simply shows the chart in a new window
Thanks
回答1:
The problem lies in the BarPainter
you are using. The JFreeChart version 1.0.13 default is to use GradientBarPainter
which adds a metallic-ish look to the bar. If you want the "old" look the solution is to use the StandardBarPainter
.
final CategoryPlot plot = chart.getCategoryPlot(); ((BarRenderer) plot.getRenderer()).setBarPainter(new StandardBarPainter());
That should do it.
Alternatively, if you want use JFreeChart's BarRenderer
, you could force it to use the StandardBarPainter
by calling the static method setDefaultBarPainter()
before initializing your renderer.
final CategoryPlot plot = chart.getCategoryPlot(); BarRenderer.setDefaultBarPainter(new StandardBarPainter()); ((BarRenderer) plot.getRenderer()).setBarPainter(new BarPainter());
If you want more control of the chart you can always build it from the ground up instead of using ChartFactory
, but that does require a lot extra code.
回答2:
Before you create the chart from ChartFactory you can set the chart theme:
ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());
The default is the JFreeTheme which adds the gradient. The following themes are available:
ChartFactory.setChartTheme(StandardChartTheme.createJFreeTheme()); ChartFactory.setChartTheme(StandardChartTheme.createDarknessTheme());
回答3:
The source code for org.jfree.chart.demo.BarChartDemo1
shows how to set the series colors. Just specify plain colors instead of gradients.
renderer.setSeriesPaint(0, Color.red); renderer.setSeriesPaint(1, Color.green); renderer.setSeriesPaint(2, Color.blue);
Correction: The key to @Jes's helpful answer may be found in the initialization of defaultBarPainter
in BarRenderer
.