JFreeChart柱状图如何消除空白区域?

6
我正在使用 JFreeChart,并希望显示玩家得分的条形图,y 轴上是得分,x 轴上将玩家的游戏分组。
例如:
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

由于玩家不必玩相同数量的游戏,这导致在创建数据集时出现大量空白区域,因为它试图为第2个和第3个玩家的第二和第三场比赛绘制柱形图。
data.addValue(score, game number, player name);

输出结果:(数字不太匹配,这只是我快速测试的结果) 请注意玩家1游戏3和玩家3游戏1和2中的空白处 有人能帮我解决如何填补这个空白吗?理论上,玩家1可能会与玩家2和3玩数百场比赛,而玩家2和3只玩几场,所以看起来相当荒谬!我是JFreeChart的新手,所以可能有一个显而易见的解决方案!
提前感谢您的帮助。

你应该将它改成堆叠图。http://www.java2s.com/Code/Java/Chart/JFreeChartStackedBarChartDemo1.htm - Scary Wombat
谢谢,但从您提供的链接来看,堆叠图更适合显示所有比赛中得分总数,而我希望如果可能的话能够并排显示每场比赛。 - ms813
不知道这是否有帮助,但在我的某些代码中,为了防止显示,我将值设置为null,而不是仅仅不包括它们。如果是折线图,这样可以使两个数据点之间的缺失数据不被连接。 - Scary Wombat
@user2310289,感谢您的评论。我尝试手动将空槽设置为null,但不幸的是,空间没有被关闭! - ms813
@ms813,您能否帮我检查一下我的问题?http://stackoverflow.com/questions/28690094/how-to-remove-top-white-space-from-pdf - VVB
1个回答

16

仔细查看图片

这里输入图片描述

以下是有关数字的一些解释。

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

以下是如何在您的图表中使用这些方法。

 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); 
你可以将值设置在0.0到1.0之间(例如0.1表示10%)。
希望这可以帮助你。
(在您的评论后更新) 好的,在这种情况下,您应该使用分层条形图。 enter image description here

谢谢,这对一般使用JFreeChart非常有帮助。但它并不能解决我的特定问题。在你的示例中,玩家0、1和2都玩了3局游戏。在我的系统中,玩家不必玩相同数量的游戏,因此不是边距的问题,而是某些列没有数据。 - ms813
再次感谢,我现在会实现它。不过我真的很想使用分组的三维条形图,因为我认为它们看起来更好,更容易理解。 - ms813

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接