基于jfreechart生成曲线、柱状等图片并展示到JSP

生成曲线、柱状图等图片并展示到 JSP 页面是很常见的需求,而 JFreeChart 是一款 Java 的图表组件库,可以帮助我们轻松地生成各种类型的图表。下面是基于 JFreeChart 生成曲线、柱状等图片并展示到 JSP 的攻略:

生成曲线、柱状图等图片并展示到 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

基础教程推荐