グラフの種類も様々で、円グラフや棒グラフ、折れ線グラフなど基本どころはもちろん、3DグラフなどExcelでできることはだいたいできそう(たぶん)。
例えば、DBと接続してればそのデータをすぐに可視化できたりする。
まずは、ここからダウンロードしてjarファイルを読み込みます。
ちなみにJFreeChartのwebページはこちら。このページにもサンプルがあるのでおしゃれです。
今回はサンプルということで書いてみました(なので、DBは使わず)。
まずはデータ準備。本の売り上げを表すグラフをつくろうかなということで、Bookクラスと売り上げを管理するクラスをつくります。
public class Book { /** 本のタイトル */ private String title; /** 本の売れた総数 */ private int amount; /** 月*/ private int month; public Book(String t,int a, int m){ this.title=t; this.amount=a; this.month=m; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } }
import java.util.ArrayList; import java.util.List; public class AmountManager { private Listlist; /** * 売り上げ情報(1月から4月までとする)をリストにいれる。 */ public AmountManager() { List books = new ArrayList (); Book b1 = new Book("もしド○", 30, 1); Book b2 = new Book("もしド○", 10, 2); Book b3 = new Book("もしド○", 40, 3); Book b4 = new Book("もしド○", 100, 4); Book b5 = new Book("△△コナン", 60, 1); Book b6 = new Book("△△コナン", 90, 2); Book b7 = new Book("△△コナン", 10, 3); Book b8 = new Book("△△コナン", 40, 4); books.add(b1); books.add(b2); books.add(b3); books.add(b4); books.add(b5); books.add(b6); books.add(b7); books.add(b8); this.list = books; } /** * リストを返す */ public List showAll(){ return this.list; } }
以下はグラフを書くためのクラスです。ウェブで使えるようにしたのでサーブレットになっています。
import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; public class ChartSample extends HttpServlet{ @Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // グラフ生成用の元データを用意 //(データベースとかでひろってきた場合もリストでもってくれば良いかと) AmountManager amountManager = new AmountManager(); Listlist=amountManager.showAll(); // グラフの基となるデータセットを用意 DefaultCategoryDataset data=new DefaultCategoryDataset(); // データセットに項目名と値のを順にセット for (Book book : list) { //addValueの引き数は「縦軸の値, 項目, 横軸の値」の順番 //ただし、第2引数と第3引数は文字列なので変換が必要 String xValue=Integer.toString(book.getMonth()); data.addValue(book.getAmount(), book.getTitle(), xValue); } //グラフを生成 //第1引数:グラフのタイトル //第2引数:横軸ラベル //第3引数:縦軸ラベル //第4引数:dataset()でつくったオブジェクト //第5引数:値の向き //第6引数:凡例を表示かどうか //第7引数:オンマウスにした際に情報を表示を作成するか //第8引数:URLを作成するかどうか JFreeChart objCht=ChartFactory.createLineChart ("カテゴリーA内商品別 月次売上","月","万円", data, PlotOrientation.VERTICAL, true,false,false); //バイナリ出力ストリームにJPEG形式で画像を出力600×400ピクセル) resp.setContentType("image/jpeg"); ServletOutputStream objSos=resp.getOutputStream(); ChartUtilities.writeChartAsJPEG(objSos,objCht,600,400); } }
#なんかソースのところに</book>みたいなのが表示されるの何でしょう。。。そんなの書いてないのに、、、(java書くときは抜いてください)
このサーブレットを実行すると、結果が出ます。
割と簡単だし、サンプルみるといろんなグラフが書けそうです。
0 件のコメント:
コメントを投稿