2011-08-16 22 views
22

mi gráfico de barras siempre se dibuja con un degradado de color por defecto. Solo quiero un color simple sin ningún efecto de estilo.JFreeChart BarChart -> NO gradiente

¿Alguien puede ayudar?

Código:

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 

Gracias

+1

Pegue su código. En la mayoría de los casos, debe agregar un código para hacerlo degradado como: GradientPaint –

+0

+1 para el título más real. Web 2.0 ¡Adiós! –

Respuesta

39

El problema está en el BarPainter que está utilizando. El valor predeterminado de JFreeChart versión 1.0.13 es GradientBarPainter, que agrega un aspecto metálico a la barra. Si desea el aspecto "antiguo", la solución es usar el StandardBarPainter.

final CategoryPlot plot = chart.getCategoryPlot(); 
((BarRenderer) plot.getRenderer()).setBarPainter(new StandardBarPainter()); 

Eso debería hacerlo.

Alternativamente, si desea utilizar JFreeChart de BarRenderer, podría forzar que se use el StandardBarPainter llamando al método estático setDefaultBarPainter() antes de iniciar su procesador.

final CategoryPlot plot = chart.getCategoryPlot(); 
BarRenderer.setDefaultBarPainter(new StandardBarPainter()); 
((BarRenderer) plot.getRenderer()).setBarPainter(new BarPainter()); 

Si desea más control del gráfico siempre se puede construir a partir de cero en lugar de utilizar ChartFactory, pero que requiere un código extra mucho.

+2

+1 He pasado por alto por completo este aspecto del problema. :-) – trashgod

+1

¡Genial! ¡Estaba buscando la solución por mucho tiempo! –

+0

Felicitaciones por la solución. El gráfico de barras "predeterminado" (creo) tiene un aspecto muy barato. – rbaleksandar

2

El source code para org.jfree.chart.demo.BarChartDemo1 muestra cómo configurar los colores de la serie. Solo especifique colores lisos en lugar de degradados.

renderer.setSeriesPaint(0, Color.red); 
renderer.setSeriesPaint(1, Color.green); 
renderer.setSeriesPaint(2, Color.blue); 

Corrección: La clave para @ de Jes útiles answer se pueden encontrar en la inicialización de defaultBarPainter en BarRenderer.

+0

No funciona, todavía todo se dibuja con un degradado. Lamentablemente, todavía no puedo subir una imagen :(Además, ¿qué sucederá con la solución superior si hay más de tres columnas? – shorty

+0

Una imagen sería buena, pero el código sería mejor. Si no hace nada, debería obtener los colores prescritos por ['DefaultDrawingSupplier'] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/plot/DefaultDrawingSupplier.html). – trashgod

+0

@Jupiter Jones: Gracias por el recordatorio; actualizado. – trashgod

6

Antes de crear el gráfico desde ChartFactory puede establecer el tema de la carta:

ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); 

El valor por defecto es el JFreeTheme que se suma el gradiente. Los siguientes temas están disponibles:

ChartFactory.setChartTheme(StandardChartTheme.createJFreeTheme()); 
ChartFactory.setChartTheme(StandardChartTheme.createDarknessTheme()); 
+0

Esta solución me ayudó en caso de utilizar StackedBarChart que no se vio afectado al cambiar barPainter en el renderizador. Tal vez estaba accediendo al renderizador incorrecto. Sin embargo, esto ayuda. – Garet