You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dynamic Reports折线图Y轴无法对齐问题求助

解决Dynamic Reports双折线图Y轴对齐问题

两个折线图Y轴未对齐的核心原因是各自根据自身数据自动计算Y轴范围,要实现对齐,需手动为两个图表设置统一的Y轴最小值和最大值。

实现步骤

  1. 遍历数据源,获取两个系列数据的全局最小、最大值,确保Y轴范围能覆盖所有数据
  2. 为每个折线图配置固定的Y轴范围

修改后的完整代码

// 1. 提前获取数据源并计算Y轴全局极值
JRDataSource dataSource = createDataSource();
Integer minY = Integer.MAX_VALUE;
Integer maxY = Integer.MIN_VALUE;
try {
    while (dataSource.next()) {
        // 替换为实际字段名,需和detectsColumn、rangeColumn对应
        Integer detects = (Integer) dataSource.getFieldValue("detectsColumn");
        Integer range = (Integer) dataSource.getFieldValue("rangeColumn");
        
        if (detects != null) {
            minY = Math.min(minY, detects);
            maxY = Math.max(maxY, detects);
        }
        if (range != null) {
            minY = Math.min(minY, range);
            maxY = Math.max(maxY, range);
        }
    }
    // 重置数据源指针,供报表使用
    dataSource.moveFirst();
} catch (JRException e) {
    e.printStackTrace();
}

// 2. 创建折线图并设置统一Y轴范围
LineChartBuilder lineChart1 = cht.lineChart()
        .setCategory(itemColumn)
        .setShowValues(false)
        .setTitle("Line chart")
        .setCategoryAxisFormat(cht.axisFormat().setLabel("Item"))
        .setShowShapes(false)
        .setRangeAxisFormat(cht.axisFormat()
                .setMinValue(minY)
                .setMaxValue(maxY)) // 绑定全局最小值
        .series(cht.serie(detectsColumn));

LineChartBuilder lineChart2 = cht.lineChart()
        .setCategory(itemColumn)
        .setShowValues(false)
        .setTitle("Line chart")
        .setCategoryAxisFormat(cht.axisFormat().setLabel("Item"))
        .setShowShapes(false)
        .setRangeAxisFormat(cht.axisFormat()
                .setMinValue(minY)
                .setMaxValue(maxY)) // 绑定全局最大值
        .series(cht.serie(rangeColumn));

// 生成报表
try {
    report().setTemplate(Templates.reportTemplate)
            .title(Templates.createTitleComponent("My Report"))
            .summary(lineChart1, lineChart2)
            .pageFooter(Templates.footerComponent)
            .setDataSource(dataSource)
            .show();
} catch (DRException e) {
    e.printStackTrace();
}

补充说明

  • 如果数据是数值类型(如Double),需将Integer替换为对应类型
  • 若需要给Y轴范围留余量(比如比最大值大10%),可对maxY做额外计算:maxY = (int) (maxY * 1.1),最小值同理调整

内容的提问来源于stack exchange,提问作者Yamasaki Noburo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:15:19