2011-08-16 25 views
22

Mój wykres słupkowy jest zawsze rysowany domyślnie z kolorem gradientowym. Chcę tylko prosty kolor bez żadnych efektów stylizowanych.JFreeChart BarChart -> Brak gradientu

Czy ktoś może pomóc?

Kod:

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 

Dzięki

+1

Wklej swój kod. W większości przypadków powinieneś dodać trochę kodu, aby gradient był jak: GradientPaint –

+0

+1 dla prawdziwego tytułu. Web 2.0 do widzenia! –

Odpowiedz

39

Problem dotyczy używanego BarPainter. Wersja domyślna JFreeChart w wersji 1.0.13 to użycie GradientBarPainter, która dodaje metaliczny wygląd do paska. Jeśli chcesz "starego" wyglądu, rozwiązaniem jest użycie StandardBarPainter.

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

To powinno wystarczyć.

Ewentualnie, jeśli chcesz używać JFreeChart na BarRenderer, można zmusić go do korzystania z StandardBarPainter poprzez wywołanie statycznej metody setDefaultBarPainter() przed inicjowania swój renderujący.

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

Jeśli chcesz mieć większą kontrolę nad wykresie zawsze można zbudować go od podstaw, zamiast używać ChartFactory, ale nie wymaga dużo dodatkowego kodu.

+2

+1 Całkowicie przeoczyłem ten aspekt problemu :-) – trashgod

+1

Świetnie! Długo szukałem rozwiązania! –

+0

Kudos za rozwiązanie. "Domyślny" (jak sądzę) wykres słupkowy ma ten bardzo tani wygląd. – rbaleksandar

2

source code dla org.jfree.chart.demo.BarChartDemo1 pokazuje jak ustawić kolory serii. Wystarczy podać zwykłe kolory zamiast gradientów.

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

Korekta: Kluczem do @ Jes pomocne answer można znaleźć w inicjalizacji defaultBarPainter w BarRenderer.

+0

Nie działa również, ale wszystko jest rysowane gradientem. Niestety nie mogę jeszcze załadować obrazu :(Co się stanie z górnym rozwiązaniem, jeśli jest więcej niż trzy kolumny? – shorty

+0

Obraz byłby dobry, ale kod byłby lepszy.Jeśli nie robisz nic, powinieneś dostać kolory określone przez ['DefaultDrawingSupplier'] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/plot/DefaultDrawingSupplier.html). – trashgod

+0

@Jupiter Jones: Dzięki za przypomnienie; Zaktualizowano: – trashgod

6

Przed utworzeniem wykresu z ChartFactory można ustawić motyw wykresu:

ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); 

Domyślnym jest JFreeTheme który dodaje gradient. Dostępne są następujące tematy:

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

To rozwiązanie pomogło mi w przypadku użycia StackedBarChart, na który nie miało wpływu zmiana barPaintera w rendererze. Być może miałem dostęp do złego renderera. Niemniej pomaga to. – Garet