我正在使用Jaspersoft Studio创建包含图表的报告文件。
当我使用条形图并尝试显示条形值标签时,这些标签会被边距覆盖。在我看来,这看起来像一个错误,有没有办法正确显示标签?
为了更好地说明问题,您可以在图片上看到问题,并在红色中找到预期值。
修改
以下是我自定义条形图聊天的进度。到目前为止,我可以做出一些改变,但我仍然坚持最重要的一个。
我尝试使用巨大的边距值而没有任何视觉效果。
rangeAxis.setUpperMargin(200);
rangeAxis.setLowerMargin(200);
我也玩过边界。在这种情况下,我可以看到整个标签,但问题是值不会停在100(这不是一个有效的解决方案)。
我发现了边缘被完全忽略的原因:
public void setUpperMargin(double margin) 设置轴的上边距(作为轴范围的百分比),并将AxisChangeEvent发送给所有已注册的侦听器。 仅在自动计算轴范围时添加此边距 - 如果手动设置轴范围,则忽略边距。
但是如果我删除了边距,则边界将从0-125自动计算,而不是范围。
像往常一样,欢迎提出任何建议。
为了更好地理解,您可以从我的GitHub存储库下载示例代码。
答案 0 :(得分:1)
jasper报告中的图表由jfreechart库生成。在您的情况下,您可以:
1)设置范围轴上边距以为值标签提供更多空间(请参阅jfreechart BarChartDemo5)。
2)在条形图内绘制标签(参见jfreechart BarChartDemo7)编辑后如果需要固定轴的上限值,则需要使用此值,因此如果上限等于最大条形值,则标签没有剩余空间< / em>的
要在jasper报告中自定义条形图,请创建一个扩展JRChartCustomizer的自定义程序类(MyChartCustomizer)。这将揭示:
public void customize(JFreeChart chart, ChartComponent chartComponent)
{
//Simple example of increasing upper margin on range axis, to print label
//inside of bar see jfreechart BarChartDemo7
CategoryPlot plot = (CategoryPlot) chart.getPlot();
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setUpperMargin(0.20); //Increase or decrease to change upper margin in percentages (0 --> 1.0)
rangeAxis.setAutoRange(true); //make sure that fixed range is not set
}
将类添加到classpath并在jrxml中设置customizerClass
属性
<barChart>
<chart customizerClass="my.package.MyChartCustomizer">
....
</chart>
...
</barChart>