2012-06-06 60 views
3

我使用JFreeChart生成StackedBarChart。根据输入数据,我可以有很多类别(通常在20到40之间),导致标签重叠。 在下面的截图可以看到与类别图表从1到38:隐藏JFreeChart中的一些类别标签以避免重叠

chart with categories from 1 to 38, overlapping labels

我想展示一些类别标签作为参考的,但不是全部。显示第一个和最后一个,以及每五个之间都是完美的。 这可能吗?

我不能改变图表的宽度,并且使标签变小只有在它们太小以至于无法读取它们时才起作用... 最后的手段是隐藏整个类别轴...

感谢您的任何建议!

回答

3

一个简单的解决方案是将Category lables设置为背景颜色(在本例中为白色)。

CategoryPlot plot = (CategoryPlot) chart.getPlot(); 
    CategoryAxis domainAxis = plot.getDomainAxis(); 
    domainAxis.setTickLabelPaint("Category 2", Color.white); 
    domainAxis.setTickLabelPaint("Category 4", Color.white); 

这将产生一个图表这样

enter image description here

+0

可能不是最漂亮的解决方案,但它起作用,我没有找到更好的解决方案。现在使用它透明的颜色(_新颜色(0,0,0,0)_) – moeTi

+0

@moeTi同意,它不是最漂亮的解决方案 - 另一种解决方案是重写getTickLabelPaint,但因为这仍然需要使用类别标签,而不是基于可用空间的决定。 – GrahamA

2

您可以在您的域轴上使用setVerticalTickLabels(true),如example所示。

附录:哎呀,example引用是为ValueAxis。对于CategoryAxis,如StackedBarChart中所使用的,您可以使用方法setCategoryLabelPositions()更灵活。在BarChartDemo1源文件中说明了典型用法,如here所示。

+1

是的,我也试过了,但它仍然是因为有太多的类别并不好看。标签已经很窄(1-2位数字),所以将它们向上或向下翻转并不会改变任何东西。 – moeTi