グラフの種類も様々で、円グラフや棒グラフ、折れ線グラフなど基本どころはもちろん、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 List list;
/**
* 売り上げ情報(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();
List list=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書くときは抜いてください)
このサーブレットを実行すると、結果が出ます。
割と簡単だし、サンプルみるといろんなグラフが書けそうです。











