生成曲线、柱状图等图片并展示到 JSP 页面是很常见的需求,而 JFreeChart 是一款 Java 的图表组件库,可以帮助我们轻松地生成各种类型的图表。下面是基于 JFreeChart 生成曲线、柱状等图片并展示到 JSP 的攻略:
1. 引入 JFreeChart 库和相关依赖
在项目中引入 JFreeChart 库和相关依赖。可以在 Maven 项目中添加以下依赖:
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.24</version>
</dependency>
2. 生成图表对象
使用 JFreeChart,首先需要生成一个图表对象。根据需要生成不同的图表类型,这里以 XY 曲线图和柱状图为例。
2.1 XY 曲线图
// 生成 XYDataset 数据集
XYSeries series = new XYSeries("Data");
series.add(1, 1);
series.add(2, 3);
series.add(3, 2);
XYDataset dataset = new XYSeriesCollection(series);
// 生成 XY 曲线图对象
JFreeChart chart = ChartFactory.createXYLineChart(
"XY Line Chart",
"X",
"Y",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
2.2 柱状图
// 生成 CategoryDataset 数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Row 1", "Column 1");
dataset.addValue(20, "Row 1", "Column 2");
dataset.addValue(30, "Row 1", "Column 3");
dataset.addValue(40, "Row 2", "Column 1");
dataset.addValue(50, "Row 2", "Column 2");
dataset.addValue(60, "Row 2", "Column 3");
// 生成柱状图对象
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart",
"Category",
"Value",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
3. 将图表生成为图片并保存
// 生成 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);
// 将图表生成为图片并保存
File file = new File("chart.png");
ChartUtilities.saveChartAsPNG(file, chart, 400, 300);
4. 在 JSP 页面中展示生成的图片
使用 JSP 展示生成的图片,可以在 JSP 中使用 <img>
标签引入图片。需要将图片保存到 web 工程的根目录或子目录下,然后在 JSP 中使用相对路径访问。
下面是一个简单的示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Chart Demo</title>
</head>
<body>
<h1>XY Line Chart</h1>
<img src="chart.png" alt="XY Line Chart"/>
</body>
</html>
5. 完整示例
下面是一个完整的示例,展示如何生成 XY 曲线图和柱状图,并将它们保存为图片并在 JSP 中展示。
5.1 生成 XY 曲线图并保存
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class XYLineChartDemo extends ApplicationFrame {
public XYLineChartDemo(String title) {
super(title);
ChartPanel chartPanel = createChartPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private ChartPanel createChartPanel() {
// 生成 XYDataset 数据集
XYSeries series = new XYSeries("Data");
series.add(1, 1);
series.add(2, 3);
series.add(3, 2);
XYDataset dataset = new XYSeriesCollection(series);
// 生成 XY 曲线图对象
JFreeChart chart = ChartFactory.createXYLineChart(
"XY Line Chart",
"X",
"Y",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
// 将图表生成为图片并保存
File file = new File("xy-line-chart.png");
try {
ChartUtilities.saveChartAsPNG(file, chart, 500, 300);
} catch (IOException e) {
e.printStackTrace();
}
// 生成 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);
return chartPanel;
}
public static void main(String[] args) {
XYLineChartDemo demo = new XYLineChartDemo("XY Line Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
5.2 生成柱状图并保存
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class BarChartDemo extends ApplicationFrame {
public BarChartDemo(String title) {
super(title);
ChartPanel chartPanel = createChartPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private ChartPanel createChartPanel() {
// 生成 CategoryDataset 数据集
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(10, "Row 1", "Column 1");
dataset.addValue(20, "Row 1", "Column 2");
dataset.addValue(30, "Row 1", "Column 3");
dataset.addValue(40, "Row 2", "Column 1");
dataset.addValue(50, "Row 2", "Column 2");
dataset.addValue(60, "Row 2", "Column 3");
// 生成柱状图对象
JFreeChart chart = ChartFactory.createBarChart(
"Bar Chart",
"Category",
"Value",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
// 将图表生成为图片并保存
File file = new File("bar-chart.png");
try {
ChartUtilities.saveChartAsPNG(file, chart, 500, 300);
} catch (IOException e) {
e.printStackTrace();
}
// 生成 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);
return chartPanel;
}
public static void main(String[] args) {
BarChartDemo demo = new BarChartDemo("Bar Chart Demo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
5.3 在 JSP 中展示图片
将生成的图片保存到 web 工程的根目录下,然后在 JSP 中使用相对路径访问。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Chart Demo</title>
</head>
<body>
<h1>XY Line Chart</h1>
<img src="${pageContext.request.contextPath}/xy-line-chart.png" alt="XY Line Chart"/>
<h1>Bar Chart</h1>
<img src="${pageContext.request.contextPath}/bar-chart.png" alt="Bar Chart"/>
</body>
</html>
在浏览器中访问 JSP 页面,就可以看到生成的 XY 曲线图和柱状图了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于jfreechart生成曲线、柱状等图片并展示到JSP - Python技术站