[HOME]: [Mac OS X]: [MacPython]: [Emacs]: [生存報告記]: [MacEmacs JP Project]: [NTEmacs JP Project]:

関連サイト

JFreeChart project (JFreeChart project)

JFreeChartのサンプルプログラム

cewolf:JFreeChart用Tag Lib

Overlib:ToolTipを作成しているライブラリ

日本語の数少ない説明の一つ

概要

JFreeChartはJavaで実装されたChartを作成するためのLGPLなライブラリです。便利です。

JClassServerChartという商用の製品がありますが、それよりも楽だったりします。欠点はあまり日本語の事考えてない事ぐらいです。

サンプルコード

3D円グラフ

// for Servlet API
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

// for jCharts API
import com.jrefinery.chart.*;
import com.jrefinery.chart.data.*;
import com.jrefinery.chart.ui.*;
import com.jrefinery.data.*;
import com.jrefinery.ui.*;

public class Pie3DChartSample extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            // Content-TypeをPNGに設定
            res.setContentType("image/png");

            // データの構築
            DefaultPieDataset piedataset = new DefaultPieDataset();
            piedataset.setValue("4月", Integer.valueOf("10"));
            piedataset.setValue("5月", Integer.valueOf("30"));
            piedataset.setValue("6月", Integer.valueOf("40"));

            // グラフの構築 (最後のブーリアンは、凡例を表示するかどうか)
            JFreeChart chart = ChartFactory.createPie3DChart("アクセス解析", piedataset, true);

            // グラフの書き出し
            OutputStream ostream = res.getOutputStream();
            ChartUtilities.writeChartAsPNG(ostream, chart, 400, 300);
            ostream.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

イメージマップ

ほぼサンプルそのままです。

// for Servlet API
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;

// for jCharts API
import com.jrefinery.chart.*;
import com.jrefinery.chart.data.*;
import com.jrefinery.chart.ui.*;
import com.jrefinery.chart.urls.*;
import com.jrefinery.chart.entity.*;
import com.jrefinery.data.*;

public class ImageMapSample extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        try {
            // データの構築
            DefaultPieDataset piedataset = new DefaultPieDataset();
            piedataset.setValue("4月", Integer.valueOf("10"));
            piedataset.setValue("5月", Integer.valueOf("30"));
            piedataset.setValue("6月", Integer.valueOf("40"));

            // チャート作成
            PiePlot plot = new PiePlot(piedataset);
            plot.setInsets(new Insets(0, 5, 5, 5));
            plot.setURLGenerator(new StandardPieURLGenerator("../chartdetail.jsp"));
            JFreeChart chart = new JFreeChart("Pie Chart Sample", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

            // チャートの背景色設定
            chart.setBackgroundPaint(java.awt.Color.white);

            // チャートの書き出し
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

            ServletContext context = getServletConfig().getServletContext();
            File file1 = new File(context.getRealPath("/") + "/piechart.png");
            ChartUtilities.saveChartAsPNG(file1, chart, 400, 400, info);

            PrintWriter out = res.getWriter();
            // Content-Typeを設定
            res.setContentType("text/html");
            out.println("<html>");
            out.println("<head><title>JFreeChart Image Map Sample</title></head>");
            out.println("<body>");
            //out.println("<p>" + tmpdir.getAbsolutePath() + "</p>");
            //out.println("<p>" + context.getRealPath("") + "</p>");
            ChartUtilities.writeImageMap(out, "chart", info);
            out.println("<img src=\"" + "../piechart.png" + "\" "
                        + "width=\"400\" height=\"400\" border=\"0\" usemap=\"#chart\">");
            out.println("</body>");
            out.println("</html>");
            out.close();

        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

コーディングポイント

com.jrefinery.chart.ChartFactoryにより書き出す図の形を決定する。

導入

JavaDocはソースから作成するようにしてください。その方が最新になります。

javadoc -d doc -windowtitle JFreeChart com.jrefinery com.jrefinery.chart com.jrefinery.chart.annotations com.jrefinery.chart.data com.jrefinery.chart.entity com.jrefinery.chart.event com.jrefinery.chart.needle com.jrefinery.chart.resources com.jrefinery.chart.servlet com.jrefinery.chart.tooltips com.jrefinery.chart.ui com.jrefinery.chart.urls com.jrefinery.data com.jrefinery.data.resources com[[.jrefinery.date com.jrefinery.io com.jrefinery.layout com.jrefinery.resources com.jrefinery.threads com.jrefinery.ui com.jrefinery.ui.about com.jrefinery.ui.about.resources com.keypoint

トラブルシューティング

日本語が文字化けする

JFreeChartはあまりこのあたりを考えてありません。デフォルトエンコーディング依存になります。

System.out.println(System.getProperty("file.encoding"));

にてデフォルトエンコーディングを取得し、すべてのソースをこのデフォルトエンコーデイングによりコーディングする方法がありますが、この方法は環境が変化するとうまく対応できません。

通常は起動スクリプトに3.x系はTOMCAT_OPTS、4.x系はCATALINA_OPTSを設定しておきます。

CATALINA_OPTS="-Dfile.encoding=JIS"
export CATALINA_OPTS

指定できるエンコーディング名はJava Character Encodingsを参照

コンパイルの時点でエンコーディングを一致させておかないと文字化けします。

イメージマップが目的の場所にリンクしない

カテゴリに日本語を利用しているとリンクがうまくいきません。日本語の場所で切れます。頭何文字かを英数字にする事で対処します。

その他のJava グラフライブラリ

Ptplot

JRobin :: RRDTool Choice for the Java World :: Welcome to JRobin

JCCKit

JOpenChart Java Library

jCharts

SourceForge.net: Chart2D

SourceForge.net: ThunderGraph

SourceForge.net: egantt


CategoryPrograming CategoryJava

紹介マニアMoinMoin: JFreeChart (last edited 2009-07-12 12:19:47 by sakito)