3年後期の担当授業でチームを組んでWebアプリ(JSP&Servlet)を企画&開発をしてもらっています。チームによってはグラフ出力する要求があり、授業では扱ってこなかったので、このエントリーはサンプルとして提示するためになります。一般用ではありませんので、くれぐれもご注意ください。
準備
以下、Eclipseで開発することを前提としています。プロジェクト名はJFreeChartです。ライブラリをこちらからダウンロードします。圧縮ファイルを展開して、jfreechart-1.0.19.jarとjcommon-1.0.23.jarをWebContent/WEB-INF/libにコピーします。
サンプル1(JSPのみでグラフ出力)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="org.jfree.chart.*,org.jfree.data.category.*,org.jfree.data.general.*,org.jfree.chart.plot.*,java.io.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <img src="graph1.jpg"> <img src="graph2.jpg"> <img src="graph3.jpg"> <% //文字化け防止用 ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); //円グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ //データセット DefaultPieDataset d1 = new DefaultPieDataset(); d1.setValue("データ1", 50); d1.setValue("データ2", 20); d1.setValue("データ3", 30); //JFreeChartオブジェクトの生成 JFreeChart chart = ChartFactory.createPieChart("ここはタイトルよ", d1, true, true, false); //画像ファイルに出力 File file = new File(application.getRealPath("graph1.jpg")); try { ChartUtilities.saveChartAsJPEG(file, chart, 300, 300); } catch (IOException e) { e.printStackTrace(); } //棒グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ //データセット DefaultCategoryDataset d2 = new DefaultCategoryDataset(); d2.addValue(1.0, "データ1", "1"); d2.addValue(2.0, "データ2", "1"); d2.addValue(2.0, "データ1", "2"); d2.addValue(3.0, "データ2", "2"); d2.addValue(0.5, "データ1", "3"); d2.addValue(1.0, "データ2", "3"); //JFreeChartオブジェクトの生成 chart = ChartFactory.createBarChart("ここはタイトルよ", "カテゴリー", "値", d2, PlotOrientation.VERTICAL, true, true, false); //画像ファイルに出力 file = new File(application.getRealPath("graph2.jpg")); try { ChartUtilities.saveChartAsJPEG(file, chart, 300, 300); } catch (IOException e) { e.printStackTrace(); } //折れ線グラフ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ //JFreeChartオブジェクトの生成 chart = ChartFactory.createLineChart("ここはタイトルよ", "カテゴリー", "値", d2, PlotOrientation.VERTICAL, true, true, false); //画像ファイルに出力 file = new File(application.getRealPath("graph3.jpg")); try { ChartUtilities.saveChartAsJPEG(file, chart, 300, 300); } catch (IOException e) { e.printStackTrace(); } %> </body> </html>
サンプル2(サーブレットでグラフ出力)
円グラフ
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.*; import org.jfree.data.general.*; import java.io.*; @WebServlet("/Pie") public class Pie extends HttpServlet { private static final long serialVersionUID = 1L; public Pie() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); //文字化け防止用 ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); //データセット DefaultPieDataset d1 = new DefaultPieDataset(); d1.setValue("データ1", 50); d1.setValue("データ2", 20); d1.setValue("データ3", 30); //JFreeChartオブジェクトの生成 JFreeChart chart = ChartFactory.createPieChart("ここはタイトルよ", d1, true, true, false); //responseに出力 try { OutputStream os = new BufferedOutputStream(response.getOutputStream()); ChartUtilities.writeChartAsJPEG(os, chart, 300, 300); os.close(); } catch (IOException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
棒グラフ
import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.*; import org.jfree.data.category.*; import org.jfree.chart.plot.*; @WebServlet("/Bar") public class Bar extends HttpServlet { private static final long serialVersionUID = 1L; public Bar() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); //文字化け防止用 ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); //データセット DefaultCategoryDataset d2 = new DefaultCategoryDataset(); d2.addValue(1.0, "データ1", "1"); d2.addValue(2.0, "データ2", "1"); d2.addValue(2.0, "データ1", "2"); d2.addValue(3.0, "データ2", "2"); d2.addValue(0.5, "データ1", "3"); d2.addValue(1.0, "データ2", "3"); //JFreeChartオブジェクトの生成 JFreeChart chart = ChartFactory.createBarChart("ここはタイトルよ", "カテゴリー", "値", d2, PlotOrientation.VERTICAL, true, true, false); //responseに出力 try { OutputStream os = new BufferedOutputStream(response.getOutputStream()); ChartUtilities.writeChartAsJPEG(os, chart, 300, 300); os.close(); } catch (IOException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
折れ線グラフ
import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.*; import org.jfree.data.category.*; import org.jfree.chart.plot.*; @WebServlet("/Line") public class Line extends HttpServlet { private static final long serialVersionUID = 1L; public Line() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); //文字化け防止用 ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme()); //データセット DefaultCategoryDataset d2 = new DefaultCategoryDataset(); d2.addValue(1.0, "データ1", "1"); d2.addValue(2.0, "データ2", "1"); d2.addValue(2.0, "データ1", "2"); d2.addValue(3.0, "データ2", "2"); d2.addValue(0.5, "データ1", "3"); d2.addValue(1.0, "データ2", "3"); //JFreeChartオブジェクトの生成 JFreeChart chart = ChartFactory.createLineChart("ここはタイトルよ", "カテゴリー", "値", d2, PlotOrientation.VERTICAL, true, true, false); //responseに出力 try { OutputStream os = new BufferedOutputStream(response.getOutputStream()); ChartUtilities.writeChartAsJPEG(os, chart, 300, 300); os.close(); } catch (IOException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
HTML
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <img src="/JFreeChart/Pie"> <img src="/JFreeChart/Bar"> <img src="/JFreeChart/Line"> </body> </html>
以下のサイトを参考にさせていただきました。ありがとうございました。
JFreeChartを使ったグラフ作成
JfreeChart 棒グラフのサンプル
[ThinkIT] 第5回:JFreeChartでグラフ作成(前編) (1/4)
[ThinkIT] 第6回:JFreeChartでグラフ作成(後編) (1/4)
JFreeChartで生成したグラフをServletで出してみる(JFreechart 0.9.16)