Jasper reports 如何将XY线添加到条形图创建具有其他轴的多类型图表?

Jasper reports 如何将XY线添加到条形图创建具有其他轴的多类型图表?,jasper-reports,bar-chart,Jasper Reports,Bar Chart,只是想知道是否有可能创建这样一个Jasper报表图表,它是多种图表类型的组合 在我的例子中,我想在两个不同的轴上组合条形图和XY线。我已经准备好了以下条形图: 理想情况下,我也可以在同一个图表中添加一条XY线,这将显示每个月所有小时类型总和的累积值。请参见末尾的图片。我觉得这是不可能的,也许我应该为XY线创建一个单独的图表? 这是这个问题的后续问题(如果您喜欢简单的条形图并动态使用序列表达式,请参阅my以了解更多详细信息) 要实现多轴图表,您应该使用,它会变得有点复杂。我们不能再使用动态系列表

只是想知道是否有可能创建这样一个Jasper报表图表,它是多种图表类型的组合

在我的例子中,我想在两个不同的轴上组合条形图XY线。我已经准备好了以下条形图:

理想情况下,我也可以在同一个图表中添加一条XY线,这将显示每个月所有小时类型总和的累积值。请参见末尾的图片。我觉得这是不可能的,也许我应该为XY线创建一个单独的图表?

这是这个问题的后续问题(如果您喜欢简单的条形图并动态使用序列表达式,请参阅my以了解更多详细信息)

要实现多轴图表,您应该使用
,它会变得有点复杂。我们不能再使用动态
系列表达式了,需要手动定义每个系列,因此我将使用您的原始bean,但仍然在一个单独的数据源中

Javabean

public class WorkingHours {

    private int month = 0;
    private double hoursNormal = 0;
    private double hoursTravel = 0;
    private double hoursOvertime = 0;
    private double hoursTotalCumulative = 0;

    public WorkingHours(int month, double hoursNormal, double hoursTravel, double hoursOvertime, double hoursTotalCumulative) {
        super();
        this.month = month;
        this.hoursNormal = hoursNormal;
        this.hoursTravel = hoursTravel;
        this.hoursOvertime = hoursOvertime;
        this.hoursTotalCumulative = hoursTotalCumulative;
    }
    //getter and setter
}
填充数据(使用您的逻辑)并在参数中作为
java.util.List
传递

List<WorkingHours> list = new ArrayList<WorkingHours>();
list.add(new WorkingHours(1, 2.3, 1.2, 2.1,4.1));
list.add(new WorkingHours(2, 5.3, 2.2,3, 9.1));
list.add(new WorkingHours(3, 3.1, 0.5, 2.0, 20.5));
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("CHART_DATA", list);
List List=new ArrayList();
增加(新工作时间(1,2.3,1.2,2.1,4.1));
增加(新的工作时间(2,5.3,2.2,3,9.1));
增加(新工作时间(3,3.1,0.5,2.0,20.5));
Map paramMap=新的HashMap();
paramMap.put(“图表数据”,列表);
报告(jrxml)



有关图表上的更多演示,请参见:

不清楚,您在这里问什么?。。如果您喜欢使用customizer,可以在条形图中画一条线。。。你在上一个问题的答案中看到我的链接了吗?我注意到了这个链接,但我想我过去有时候已经浏览过了。如果我没记错的话,这个链接展示了一种情况,即在报告中添加了一条简单的直线。在我的情况下,我想在报告的右侧添加一个XY线+额外的专用y值方案。理想情况下,此XY线的数据将使用与此处所述相同的图表数据填充:。我在原始问题中添加了图像来描述情况。customizer可以这样做吗?不,您需要多轴图表,并且要单独定义每个系列,我已发布了答案。下次先发布您的最终解决方案,这样我们就可以立即为您的实现找到正确的数据源。不过,展示这两种方法很有趣,现在您已经了解了jasper Report中图表的所有内容,我同意。我只是倾向于一点一点地处理事情,比如首先创建更简单的用例,然后再尝试在此基础上构建。这一次,这不是理想的方法。老实说,我只盯着那条XY线,直到很久以后才注意到那些“第二轴”的值,所以我想这可能是这次唯一的路径了……是时候在SOThanks上放一些很好的图表示例来获得非常好的答案了!我注意到Jasper图表中的一个非常恼人的特性。似乎至少在这个多轴图表中,不可能使用$R{message.keys}来定位系列文本。例如,如果我替换为,Jasper将抛出一个“由以下原因引起的:net.sf.jasperreports.engine.JRRuntimeException:Category series name为null。”错误。在创建图表之前,它似乎无法读取文本,因此值仍然为空。@Vka,我无法复制此值,对我来说效果很好。我在我的包中使用$R{test}做了一个简单的测试,在jasperReport中定义,我有test=Hello,它工作得很好。嗯,我想在将数据传递给图表之前,我必须对消息进行本地化,这样消息在数据集中就已经是正确的格式了。好吧,也许我的环境出了问题。我在这里看到了一些奇怪的东西{lw是正确的吗?),试着把它放到一个文本字段中
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="working_hours" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="1a12c021-57e2-4482-a273-56cbd3f78a17">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <subDataset name="chartDataSet" uuid="119b7f0e-01ef-4e2b-b628-d76f51e83768">
        <field name="month" class="java.lang.Integer"/>
        <field name="hoursNormal" class="java.lang.Double"/>
        <field name="hoursTravel" class="java.lang.Double"/>
        <field name="hoursOvertime" class="java.lang.Double"/>
        <field name="hoursTotalCumulative" class="java.lang.Double"/>
    </subDataset>
    <parameter name="CHART_DATA" class="java.util.List" isForPrompting="false"/>
    <summary>
        <band height="282" splitType="Stretch">
            <multiAxisChart>
                <chart evaluationTime="Report">
                    <reportElement x="62" y="17" width="419" height="235" uuid="8a16251e-8c1a-4384-8487-9be8f6c274e5"/>
                    <chartTitle/>
                    <chartSubtitle/>
                    <chartLegend position="Right"/>
                </chart>
                <multiAxisPlot>
                    <plot/>
                    <axis position="rightOrBottom">
                        <lineChart>
                            <chart evaluationTime="Report">
                                <reportElement positionType="Float" x="0" y="25" width="270" height="175" backcolor="#FFFFFF" uuid="4a755d76-1350-4921-a0be-20ae9e485e12"/>
                                <chartTitle color="#000000"/>
                                <chartSubtitle color="#000000"/>
                                <chartLegend textColor="#000000" backgroundColor="#FFFFFF" position="Right"/>
                            </chart>
                            <categoryDataset>
                                <dataset>
                                    <datasetRun subDataset="chartDataSet" uuid="abec2dce-b670-4e84-b71f-469d954dbcb5">
                                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{CHART_DATA})]]></dataSourceExpression>
                                    </datasetRun>
                                </dataset>
                                <categorySeries>
                                    <seriesExpression><![CDATA["Total Cum"]]></seriesExpression>
                                    <categoryExpression><![CDATA[$F{month}]]></categoryExpression>
                                    <valueExpression><![CDATA[$F{hoursTotalCumulative}]]></valueExpression>
                                </categorySeries>
                            </categoryDataset>
                            <linePlot isShowLines="true" isShowShapes="true">
                                <plot>
                                    <seriesColor seriesOrder="0" color="#9900CC"/>
                                </plot>
                                <categoryAxisFormat>
                                    <axisFormat/>
                                </categoryAxisFormat>
                                <valueAxisLabelExpression><![CDATA["Total Cum"]]></valueAxisLabelExpression>
                                <valueAxisFormat>
                                    <axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="#,##0" axisLineColor="#000000"/>
                                </valueAxisFormat>
                            </linePlot>
                        </lineChart>
                    </axis>
                    <axis>
                        <barChart>
                            <chart evaluationTime="Report">
                                <reportElement x="0" y="0" width="0" height="0" backcolor="#FFFFFF" uuid="723abd06-b593-422a-b679-043084525a8c"/>
                                <chartTitle color="#000000"/>
                                <chartSubtitle color="#000000"/>
                                <chartLegend textColor="#000000" backgroundColor="#FFFFFF" position="Right"/>
                            </chart>
                            <categoryDataset>
                                <dataset>
                                    <datasetRun subDataset="chartDataSet" uuid="abec2dce-b670-4e84-b71f-469d954dbcb5">
                                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{CHART_DATA})]]></dataSourceExpression>
                                    </datasetRun>
                                </dataset>
                                <categorySeries>
                                    <seriesExpression><![CDATA["Normal"]]></seriesExpression>
                                    <categoryExpression><![CDATA[$F{month}]]></categoryExpression>
                                    <valueExpression><![CDATA[$F{hoursNormal}]]></valueExpression>
                                </categorySeries>
                                <categorySeries>
                                    <seriesExpression><![CDATA["Travel"]]></seriesExpression>
                                    <categoryExpression><![CDATA[$F{month}]]></categoryExpression>
                                    <valueExpression><![CDATA[$F{hoursTravel}]]></valueExpression>
                                </categorySeries>
                                <categorySeries>
                                    <seriesExpression><![CDATA["Overtime"]]></seriesExpression>
                                    <categoryExpression><![CDATA[$F{month}]]></categoryExpression>
                                    <valueExpression><![CDATA[$F{hoursOvertime}]]></valueExpression>
                                </categorySeries>
                            </categoryDataset>
                            <barPlot>
                                <plot/>
                                <itemLabel/>
                                <categoryAxisFormat>
                                    <axisFormat/>
                                </categoryAxisFormat>
                                <valueAxisLabelExpression><![CDATA["h"]]></valueAxisLabelExpression>
                                <valueAxisFormat>
                                    <axisFormat labelColor="#000000" tickLabelColor="#000000" tickLabelMask="#,##0" axisLineColor="#000000"/>
                                </valueAxisFormat>
                            </barPlot>
                        </barChart>
                    </axis>
                </multiAxisPlot>
            </multiAxisChart>
        </band>
    </summary>
</jasperReport>