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 库创建的报表中使用了气泡图。