ZetCode

JasperReports 气泡图

最后修改日期:2024 年 2 月 12 日

JasperReports 气泡图教程展示了如何在 JasperReports 库中创建气泡图。

JasperReports 是一个开源的报表库。它可以创建多种格式的报表,包括 PDF、HTML、XLS 或 CSV。

气泡图是散点图的一个变体,它具有一个额外的维度。我们使用气泡而不是数据点。前两个维度被可视化为坐标。气泡的大小代表了额外的维度。

JasperReports 气泡图示例

在以下示例中,我们将气泡图放入报表中;该图显示了产品。

report.xml
<?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="report" pageWidth="595" pageHeight="842" columnWidth="555"
        leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

    <queryString language="SQL">
        <![CDATA[SELECT name, price, quantity, market_share FROM products]]>
    </queryString>

    <field name="name"/>
    <field name="price" class="java.lang.Integer"/>
    <field name="quantity" class="java.lang.Integer"/>
    <field name="market_share" class="java.lang.Integer"/>

    <summary>
        <band height="450" splitType="Stretch">
            <bubbleChart>
                <chart evaluationTime="Report">
                    <reportElement x="20" y="20" width="450" height="400"/>
                    <chartTitle position="Top">
                        <titleExpression><![CDATA["Products"]]></titleExpression>
                    </chartTitle>
                    <chartSubtitle/>
                    <chartLegend/>
                </chart>
                <xyzDataset>
                    <dataset/>
                    <xyzSeries>
                        <seriesExpression><![CDATA[$F{name}]]></seriesExpression>
                        <xValueExpression><![CDATA[$F{quantity}]]></xValueExpression>
                        <yValueExpression><![CDATA[$F{price}]]></yValueExpression>
                        <zValueExpression><![CDATA[$F{market_share} * 5]]></zValueExpression>
                    </xyzSeries>
                </xyzDataset>
                <bubblePlot>
                    <plot/>
                    <xAxisLabelExpression><![CDATA["Quantity"]]></xAxisLabelExpression>
                    <xAxisFormat>
                        <axisFormat/>
                    </xAxisFormat>
                    <yAxisLabelExpression><![CDATA["Price"]]></yAxisLabelExpression>
                    <yAxisFormat>
                        <axisFormat/>
                    </yAxisFormat>
                    <domainAxisMinValueExpression><![CDATA[0]]></domainAxisMinValueExpression>
                    <domainAxisMaxValueExpression><![CDATA[80]]></domainAxisMaxValueExpression>
                    <rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
                    <rangeAxisMaxValueExpression><![CDATA[1000]]></rangeAxisMaxValueExpression>
                </bubblePlot>
            </bubbleChart>
        </band>
    </summary>
</jasperReport>

气泡图使用 bubbleChart 标签。

<queryString language="SQL">
    <![CDATA[SELECT name, price, quantity, market_share FROM products]]>
</queryString>

SQL 查询选择四个列。

<field name="name"/>
<field name="price" class="java.lang.Integer"/>
<field name="quantity" class="java.lang.Integer"/>
<field name="market_share" class="java.lang.Integer"/>

字段被映射到列。

<xyzDataset>
    <dataset/>
    <xyzSeries>
        <seriesExpression><![CDATA[$F{name}]]></seriesExpression>
        <xValueExpression><![CDATA[$F{quantity}]]></xValueExpression>
        <yValueExpression><![CDATA[$F{price}]]></yValueExpression>
        <zValueExpression><![CDATA[$F{market_share} * 5]]></zValueExpression>
    </xyzSeries>
</xyzDataset>

$F{name} 用于标签。$F{quantity} 放置在 x 轴上,而 $F{price} 放置在 y 轴上。$F{market_share} 用于 z 坐标;它代表气泡。通过将值乘以 5 来手动调整比例。

<domainAxisMinValueExpression><![CDATA[0]]></domainAxisMinValueExpression>
<domainAxisMaxValueExpression><![CDATA[80]]></domainAxisMaxValueExpression>
<rangeAxisMinValueExpression><![CDATA[0]]></rangeAxisMinValueExpression>
<rangeAxisMaxValueExpression><![CDATA[1000]]></rangeAxisMaxValueExpression>

我们调整轴值。

report.gvy
package com.zetcode

@GrabConfig(systemClassLoader=true)
@Grab(group='net.sf.jasperreports', module='jasperreports', version='6.21.0')
@Grab(group='com.github.librepdf', module='openpdf', version='1.3.39')
@Grab(group='com.h2database', module='h2', version='1.4.200')

import net.sf.jasperreports.engine.JasperCompileManager
import net.sf.jasperreports.engine.JasperExportManager
import net.sf.jasperreports.engine.JasperFillManager
import groovy.sql.Sql

def xmlFile = "report.xml"
def jrReport = JasperCompileManager.compileReport(xmlFile)

def createTable = '''
CREATE TABLE products(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), price INT, quantity INT, market_share INT);
INSERT INTO products(name, price, quantity, market_share) VALUES('Product A', 642, 50, 23);
INSERT INTO products(name, price, quantity, market_share) VALUES('Product B', 540, 23, 47);
INSERT INTO products(name, price, quantity, market_share) VALUES('Product C', 188, 19, 30);
'''

def url = "jdbc:h2:mem:"

Sql.withInstance(url) { sql ->

    sql.execute(createTable)

    def params = [:]
    def jPrint = JasperFillManager.fillReport(jrReport, params, sql.connection)

    JasperExportManager.exportReportToPdfFile(jPrint, "report.pdf")
}

这是生成报表的 Groovy 代码。我们在内存中的 H2 数据库中创建数据。

在本文中,我们在使用 JasperReports 库创建的报表中使用了气泡图。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出 所有 JasperReports 教程