Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Closing up blank space in JFreeChart bar chart

I am using JFreeChart and would like to display a bar chart of player's scores, with the score on the y-axis and the player's games grouped on the x-axis.

e.g.

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

Because the players do not have to play the same number of games, this results in a lot of blank space when the dataSet is created, as it tries to plot a bar for Player 2 & 3 games 2 & 3.

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

Output: (the numbers dont quite match, this was just a quick test I knocked up) Note the blank space in player 1 game 3 and player 3 games 1 and 2

Can anybody help me with how to close up this blank space? In theory player 1 could go on to play 100s of games with player 2 and 3 playing only a few, so it would look quite ridiculous! I am new to JFreeChart so there is probably an obvious solution!

Thank you in advance for your help.

like image 291
ms813 Avatar asked May 23 '13 23:05

ms813


1 Answers

First Look at the Picture carefully enter image description here

Here is some Explanation w.r.t Numbers.

  1. setLowerMargin(Double margin).
  2. setUpperMargin(Double margin).
  3. setCategoryMargin(Double margin).
  4. setItemMargin(Double margin).

Here is How you can use the methods in your chart

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

You can set the value between 0.0 to 1.0 (example 0.1 means 10%)

Hope this Helps

(Update After your comment) Well in this Case you should use Layered Bar Chart

enter image description here

like image 189
Neo Avatar answered Sep 20 '22 01:09

Neo