2013-05-23 4 views
5

Ich benutze JFreeChart und möchte ein Balkendiagramm der Spielstände anzeigen, wobei die Punkte auf der y-Achse und die Spiele des Spielers auf der x-Achse gruppiert sind.Schließen von Leerzeichen im JFreeChart-Balkendiagramm

z.B.

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 

Da die Spieler müssen nicht die gleiche Anzahl von Spielen spielen, das ist eine Menge von leeren Raum ergibt, wenn die dataSet erstellt wird, da es eine Bar für Spieler 2 & 3 Spiele 2 & zu zeichnen versucht, 3.

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

Ausgang: (die Zahlen nicht ganz erreicht, dies war nur ein kurzer Test, den ich oben geklopft) Note the blank space in player 1 game 3 and player 3 games 1 and 2

jemand kann mir helfen mit, wie diese blan schließen k Raum? Theoretisch könnte Spieler 1 100 Spiele spielen, während Spieler 2 und 3 nur wenige Spiele spielen, also würde es ziemlich lächerlich aussehen! Ich bin neu in JFreeChart, also gibt es wahrscheinlich eine offensichtliche Lösung!

Vielen Dank im Voraus für Ihre Hilfe.

+0

Sie sollen es zu einem gestapelten Diagramm ändern http://www.java2s.com/Code/Java/Chart/JFreeChartStackedBarChartDemo1.htm –

+0

Danke, aber auf Ihrem Link aus der Betrachtung scheint es, dass die gestapelten Graphen ist besser geeignet, um die Gesamtzahl der erzielten Punkte in allen Spielen anzuzeigen, während ich es vorziehe, jedes Spiel möglichst nebeneinander zu zeigen. – ms813

+0

weiß nicht, ob dies hilft, aber in einigen meiner Code, um die Anzeige zu verhindern, setze ich die Werte auf Null, anstatt sie einfach nicht zu enthalten. Wenn ein Liniendiagramm das erlaubt zwei Punkte nicht verbunden werden, wenn die Daten dazwischen fehlen –

Antwort

13

ersten Blick auf das Bild sorgfältig enter image description here

Hier einige Erläuterung w.r.t Zahlen.

  1. setLowerMargin (Doppelrand).
  2. setUpperMargin (Doppelrand).
  3. setCategoryMargin (Doppelrand).
  4. setItemMargin (Doppelrand).

Hier ist, wie Sie die Methoden in Ihrem Diagramm

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

verwenden können Sie den Wert zwischen 0,0 bis 1,0 einstellen (zB 0,1 bedeutet 10%)

this helps

(Aktualisieren Sie nach Ihrem Kommentar) Nun in diesem Fall sollten Sie verwenden Layered Balkendiagramm

enter image description here

+0

Danke, das ist hilfreich für die Verwendung von JFreeChart im Allgemeinen. Es löst jedoch nicht mein spezifisches Problem. In Ihrem Beispiel haben die Spieler 0,1 und 2 jeweils 3 Spiele gespielt. In meinem System müssen die Spieler nicht die gleiche Menge an Spielen spielen, es ist also kein Fall der Ränder, eher, dass es für einige der Spalten keine Daten gibt. – ms813

+0

Nochmals vielen Dank, ich werde das jetzt implementieren. Ich würde wirklich gerne die gruppierten 3D-Balken verwenden, da ich denke, dass sie viel besser aussehen und leichter zu verstehen sind. – ms813

+0

@Neo Können Sie bitte meine Frage überprüfen? http://stackoverflow.com/questions/28690094/how-to-remove-top-white-space-from-pdf – VVB

Verwandte Themen