2013-05-23 22 views
5

Używam JFreeChart i chcę wyświetlić wykres słupkowy wyników gracza, z wynikiem na osi y i grach gracza zgrupowanych na osi X.Zamykanie pustej przestrzeni w wykresie słupkowym JFreeChart

np.

String[] {Player name, score, game number} 
Player 1, 10 , 1 
Player 1, 12 , 2 
Player 1, 15 , 3 
Player 2, 11 , 1 
Player 3, 18 , 1 

Ponieważ gracze nie muszą grać w tę samą liczbę gier, skutkuje dużą ilością pustej przestrzeni po zbiorze danych jest tworzony, jak to próbuje się wykreślić poprzeczkę dla Gracz 2 & 3 gry 2 & 3.

data.addValue(score, game number, player name); 

wyjściowa: (numery nie dość mecz, było to po prostu szybki test Zapukałem do góry) Note the blank space in player 1 game 3 and player 3 games 1 and 2

Czy ktoś może mi pomóc w jaki sposób zamknąć ten blan k przestrzeni? Teoretycznie gracz 1 mógł grać w setki gier, a gracz 2 i 3 grał tylko kilka, więc wyglądałoby to dość absurdalnie! Jestem nowy w JFreeChart, więc prawdopodobnie istnieje oczywiste rozwiązanie!

Z góry dziękujemy za pomoc.

+0

należy go zmienić na skumulowanym wykresie http://www.java2s.com/Code/Java/Chart/JFreeChartStackedBarChartDemo1.htm –

+0

Dzięki, ale patrząc na linku wydaje się, że skumulowany wykres jest bardziej dostosowany do wyświetlania całkowitej liczby punktów zdobytych we wszystkich grach, a ja wolałbym pokazać każdą grę obok siebie, jeśli to możliwe. – ms813

+0

nie wiem, czy to pomoże, ale w niektórych z moich kodów, aby zapobiec wyświetlaniu ustawiam wartości na null, a nie tylko ich nie uwzględniam. Jeśli wykres liniowy pozwala na łączenie dwóch punktów, jeśli pomiędzy tymi danymi nie ma danych, –

Odpowiedz

13

Najpierw spojrzeć na obraz dokładnie enter image description here

Oto Wyjaśnienie w.r.t Liczb.

  1. setLowerMargin (Double margin).
  2. setUpperMargin (podwójny margines).
  3. setCategoryMargin (Double margin).
  4. setItemMargin (podwójny margines).

Oto jak można użyć metod na wykresie

CategoryPlot p = chart.getCategoryPlot(); 

CategoryAxis axis = p.getDomainAxis(); 
axis.setLowerMargin(0.1); 
axis.setUpperMargin(0.1); 
axis.setCategoryMargin(0.1); 
BarRenderer renderer = (BarRenderer) p.getRenderer(); 
renderer.setItemMargin(0.1); 

Można ustawić wartość od 0,0 do 1,0 (przykład 0,1 oznacza 10%)

Hope this helps

(Aktualizacja po komentarzu) W tym przypadku należy użyć Warstwowego wykresu słupkowego

enter image description here

+0

Dzięki, jest to pomocne przy ogólnym użyciu JFreeChart. Jednak nie rozwiązuje on mojego konkretnego problemu. W twoim przykładzie, gracze 0,1 i 2 wszyscy grali w 3 gry. W moim systemie gracze nie muszą grać tej samej ilości gier, więc nie jest to kwestia marginesów, raczej nie ma danych dla niektórych kolumn. – ms813

+0

Jeszcze raz dziękuję, zaimplementuję to na razie. Naprawdę chciałbym użyć pogrupowanych 3d barów, ponieważ myślę, że wyglądają o wiele lepiej i są łatwiejsze do zrozumienia. – ms813

+0

@Neo Czy możesz sprawdzić moje pytanie? http://stackoverflow.com/questions/28690094/how-to-remove-top-white-space-f-pdf – VVB