【问题标题】:Jasper Reports - Multi axis chart - Only one plot showingJasper Reports - 多轴图表 - 仅显示一个图
【发布时间】:2018-08-29 17:09:12
【问题描述】:

我正在尝试创建一个多轴图表,其中一个图表显示条形图,另一个图表显示折线图。我找到了多轴图表来执行此操作,但是当我运行我的代码时,只显示一个图(图片提供here)。关于如何解决这个问题的任何想法?

在寻找解决方案的过程中,我遇到了this post,但当我执行此操作时,它只是做同样的事情。

(当我在 jrxml 中切换 barChart 和 lineChart 的顺序时,它只显示 lineChart。下面提供的代码。)

Java 豆

public class OperationSuccessrateBean {
    private Integer week;
    private Integer totalOrders;
    private Double successrate;

    public OperationSuccessrateBean(Integer week, Integer totalOrders, Double successrate) {
        this.week = week;
        this.totalOrders = totalOrders;
        this.successrate = successrate;
    }

    public Integer getWeek() {
        return week;
    }

    public Integer getTotalOrders() {
        return totalOrders;
    }

    public Double getSuccessrate() {
        return successrate;
    }
}

Java:填写报告

private void setOperationSuccessrate(String operationType, Map<String, Object> paramMap,
        List<OperationSuccessrateBean> successrateBeans) {
    paramMap.put(operationType + "_OPERATION_SUCCESSRATE_SET", new JRBeanCollectionDataSource(
            successrateBeans));
    paramMap.put(operationType + "_OPERATION_SUCCESSRATE_ORDERS_SET",
            new JRBeanCollectionDataSource(successrateBeans));
}

jrxml:定义数据集和参数

<subDataset name="loadOperationSuccesrateSet" uuid="247b3e44-ef98-45f4-a909-e8b5678acc8f">
    <field name="week" class="java.lang.Integer"/>
    <field name="totalOrders" class="java.lang.Integer"/>
    <field name="successrate" class="java.lang.Double"/>
</subDataset>
<subDataset name="loadOperationSuccesrateOrdersSet" uuid="247b3e44-ef98-45f4-a909-e8b5678acc8f">
    <field name="week" class="java.lang.Integer"/>
    <field name="totalOrders" class="java.lang.Integer"/>
    <field name="successrate" class="java.lang.Double"/>
</subDataset>
<parameter name="LOAD_OPERATION_SUCCESSRATE_SET" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/>
<parameter name="LOAD_OPERATION_SUCCESSRATE_ORDERS_SET" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/>

jrxml:多图表

<multiAxisChart>
    <chart evaluationTime="Report">
        <reportElement x="0" y="41" width="550" height="200" uuid="5078c050-dd35-43db-bf30-d04152672bd6"/>
        <chartTitle/>
        <chartSubtitle/>
        <chartLegend/>
    </chart>
    <multiAxisPlot>
        <plot/>
        <axis position="rightOrBottom">
            <lineChart>
                <chart evaluationTime="Report">
                    <reportElement positionType="Float" x="0" y="25" width="270" height="175" backcolor="#FFFFFF" uuid="013d7a7d-2280-46d0-8d44-d537d062a182"/>
                    <chartTitle color="#000000"/>
                    <chartSubtitle color="#000000"/>
                    <chartLegend textColor="#000000" backgroundColor="#FFFFFF"/>
                </chart>
                <categoryDataset>
                    <dataset>
                        <datasetRun subDataset="loadOperationSuccesrateSet" uuid="53426928-1245-4443-97da-509b00ba1f98">
                            <dataSourceExpression><![CDATA[$P{LOAD_OPERATION_SUCCESSRATE_SET}]]></dataSourceExpression>
                        </datasetRun>
                    </dataset>
                    <categorySeries>
                        <seriesExpression><![CDATA["Success rate"]]></seriesExpression>
                        <categoryExpression><![CDATA[$F{week}]]></categoryExpression>
                        <valueExpression><![CDATA[$F{successrate}]]></valueExpression>
                    </categorySeries>
                </categoryDataset>
                <linePlot>
                    <plot/>
                    <categoryAxisFormat>
                        <axisFormat/>
                    </categoryAxisFormat>
                    <valueAxisLabelExpression><![CDATA["Success rate"]]></valueAxisLabelExpression>
                    <valueAxisFormat>
                        <axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="#0%" axisLineColor="#000000">
                            <labelFont/>
                        </axisFormat>
                    </valueAxisFormat>
                    <rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
                    <rangeAxisMaxValueExpression><![CDATA[1]]></rangeAxisMaxValueExpression>
                </linePlot>
            </lineChart>
        </axis>
        <axis>
            <barChart>
                <chart evaluationTime="Report">
                    <reportElement x="0" y="0" width="0" height="0" backcolor="#FFFFFF" uuid="15a15c89-a2d4-4971-b4b3-1c5ac224a91e"/>
                    <chartTitle color="#000000"/>
                    <chartSubtitle color="#000000"/>
                    <chartLegend textColor="#000000" backgroundColor="#FFFFFF"/>
                </chart>
                <categoryDataset>
                    <dataset>
                        <datasetRun subDataset="loadOperationSuccesrateOrdersSet" uuid="4d001c74-1fde-47cd-b525-85d828d6ccf2">
                            <dataSourceExpression><![CDATA[$P{LOAD_OPERATION_SUCCESSRATE_ORDERS_SET}]]></dataSourceExpression>
                        </datasetRun>
                    </dataset>
                    <categorySeries>
                        <seriesExpression><![CDATA["TotalOrders"]]></seriesExpression>
                        <categoryExpression><![CDATA[$F{week}]]></categoryExpression>
                        <valueExpression><![CDATA[$F{totalOrders}]]></valueExpression>
                    </categorySeries>
                </categoryDataset>
                <barPlot>
                    <plot/>
                    <itemLabel/>
                    <categoryAxisFormat>
                        <axisFormat/>
                    </categoryAxisFormat>
                    <valueAxisLabelExpression><![CDATA["# Orders"]]></valueAxisLabelExpression>
                    <valueAxisFormat>
                        <axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="# ##0" axisLineColor="#000000">
                            <labelFont/>
                        </axisFormat>
                    </valueAxisFormat>
                    <rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
                </barPlot>
            </barChart>
        </axis>
    </multiAxisPlot>
</multiAxisChart>

当我在没有多轴图表的情况下运行我的代码时,只需创建两个相邻的图就可以了。所以我假设数据已正确传递给报告。

我使用的相关库是:

  • net.sf.jasperreports.engine-6.4.0.jar
  • jfreechart-1.0.19.jar

【问题讨论】:

  • 我刚刚找到了解决方法。当我在多轴图表中添加第三个图时,也显示了这个图。因此,为了解决我的问题,添加了一个新的 lineChart 并将其移至 mulitaxis 的第一位。新问题是我在右侧有一个额外的值轴,所以我通过将值轴的所有颜色设置为#FFFFF 来隐藏其中一个轴。我用 jasperreports 填写了 bug 来解决这个问题

标签: java charts jasper-reports


【解决方案1】:

洛伦兹,我也有同样的问题。 缺少图表的原因是我在报告中直接传递了 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource 作为参数。 显然,要使其正常工作,您必须传递一个列表:

<parameter name="FIRST_DATA_SOURCE" class="java.util.List" isForPrompting="false"/>
<parameter name="SECOND_DATA_SOURCE" class="java.util.List" isForPrompting="false"/>

然后在报告中创建 JRBeanCollectionDataSource:

<dataset>
    <datasetRun subDataset="YOUR_SUBDATASET" uuid="a5941ba5-2088-4a31-8236-64704b54d979">
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{FIRST_DATA_SOURCE})]]></dataSourceExpression>
    </datasetRun>
</dataset>

在您引用的帖子中,它是这样使用的,并且有效!

【讨论】:

  • 您也可以传递一个 JRDatasource,这应该不是问题,我猜您的数据源有问题(可能您使用了两次)并且它不会自动倒带。 ps我写了你所指的原始帖子
  • 我知道你可以通过 JRDatasource。这就是我对时间序列图所做的事情。但是当我尝试使用包含 2 个时间序列的多轴图时,只显示了第二个。我检查了所有内容,没有发现任何问题,我交换了源并看到第一个数据集正常,但现在第二个数据集丢失了。然后经过 3 个小时的不同尝试,我只是将参数更改为列表,Java 发送一个 List 和 JRDatasource 以在模板中初始化并且它工作。
  • 并且您确定您没有在其他任何地方使用相同的 JRDatasource?因此,如果您不倒带,您将无法重新使用 JRDatasource。如果是这样,那是一个奇怪的错误,如果我有时间,我会尝试重现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多