【问题标题】:How can I add horizontal line to bar chart in Jasper Report?如何在 Jasper Report 的条形图中添加水平线?
【发布时间】:2016-05-15 17:06:47
【问题描述】:

我正在尝试设计一个带有条形图的报告,我需要在其中添加一个阈值。我尝试过使用多轴图表,其中不同轴的比例总是不同的。

有没有其他解决方案可以在条形图中添加折线?

我的预期输出如下图:

【问题讨论】:

  • 可能,您使用的是哪个图表组件,显示您调用图表的 jrxml 或代码......
  • 这个图表是用excel画的,我打算用jasper report来画。计划用条形图绘制。但不知道如何通过给定参数动态添加阈值线。
  • 你打算使用Jia哪个组件?需要了解库...方法不同...
  • 组件是什么意思?我正在平移使用动态 jasper 生成 jrxml,然后使用 jasper 报告来运行报告。从动态 jasper 端,使用 DJBarChartBuilder 构建图表。虽然看起来它只能生成条形图。我用谷歌搜索,建议扩展 AbstractChartCustomizer 在碧玉报告中创建了一个新图表。如果采用这个解决方案,我需要花很多时间在动态 jasper 定制上。有什么方便的解决办法吗?
  • jfreechart你喜欢用什么库?

标签: java jasper-reports jfreechart dynamic-jasper


【解决方案1】:

要在条形图上画一条线,请将ValueMarker 添加到 CategoryPlot。

在 jasper 报告中,我添加了一个 JRChartCustomizer

public class MyChartCustomizer implements JRChartCustomizer {

    @Override
    public void customize(JFreeChart jfchart, JRChart jrchart) {
        CategoryPlot plot = (CategoryPlot) jfchart.getPlot();
        //Set at what value you like the line, its color and size of stroke
        ValueMarker vm = new ValueMarker(13000,Color.BLUE, new BasicStroke(2.0F));
        //add marker to plot
        plot.addRangeMarker(vm);
    }
}

jrxml 中确保您的类在类路径中并在图表标签上设置 customizerClass 属性

<barChart>
    <chart customizerClass="MyChartCustomizer">
   ....
    </chart>
   ...
</barChart>

如果你使用,可以直接在代码中添加

chart.addCustomizer(new DRIChartCustomizer() {      
    private static final long serialVersionUID = 1L;
    @Override
    public void customize(JFreeChart chart, ReportParameters arg1) {
        CategoryPlot plot = (CategoryPlot) jfchart.getPlot();
        ValueMarker vm = new ValueMarker(13000,Color.BLUE, new BasicStroke(2.0F));
        plot.addRangeMarker(vm);
    }
});

如果你使用setCustomizerClass(如在jrxml中)

DJBarChartBuilder().setCustomizerClass("MyChartCustomizer");

结果示例

注意:示例中没有使用包名,如果MyChartCustomizer在包中,则需要在setCustomizerClass示例中注明完整的包名"my.package.MyChartCustomizer"

【讨论】:

  • 动态5.0.4找不到DRIChartCustomizer类,哪个版本有这个类?
  • DRIChartCustomizer 在 dynamicreports-core-X.X.X.jar 中
  • 是的,当我发现错字问题时,我无法对其进行编辑。如果您有权限,请帮助更改它。我正在使用动态碧玉。
  • @RaysenJia 好的,我已经更新了答案以包括动态碧玉,只需在构建图表时连接调用 .setCustomizerClass("MyChartCustomizer")
  • 注意:我已在您的问题中添加了 dynamic-jasper 标签。
【解决方案2】:

对于一条水平线,您可以使用提供的图表定制器:

转到图表 -> 属性 -> 图表(选项卡) -> 图表定制器

您可以在此处添加一个范围间隔标记,并使用所需值(在您的示例中为 13000)使用开始值和结束值对其进行配置。

这样一来,13000 的垂直值就可以根据需要画一条水平线了。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 2019-09-07
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多