[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を参照

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

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

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


CategoryPrograming CategoryJava Abilify Acarbose Achromycin Aciphex Actos Acyclovir Adalat Adapalene Advair Diskus Inhaler Albuterol Alendronate Allegra ALLEGRA D Allopurinol Altace Amitriptyline Amlodipine Amlodipine Besylate Amoxil Ampicillin Ansaid Arava Atenolol Atorvastatin Avandia Azithromycin Bactrim Bactroban Bextra Biaxin Calan Cardura Carisoprodol Carvedilol Ceclor Celebrex Celecoxib Celexa Cephalexin Cialis Cilostazol Cimetidine Cipro Ciprofloxacin Cisapride Clarinex Claritin Cleocin Clindamycin Clobetasol Clomid Clotrimazole Coumadin Cozaar Cutivate Cycrin Cytotec Danozol Desyrel Diclofenac Differin Diflucan Dilantin Dimenhydrinate Ditropan Doxycycline Dramamine Effexor Elocon Enalapril Erythromycin Esidrex Esomeprazole Estrace Estradiol Evista Famotidine Feldene Fexofenadine Fexofenadine + Pseudoephedrine Finasteride Flagyl FLomax Flonase Flovent Floxin Fluconazole Fluoxetine Hydrochloride Flutivate Fosamax Frusemide Gemfibrozil Glibenclamide Glucophage GLUCOPHAGE XR Glucotrol Glucovance Glyburide GLYBURIDE+METFORMIN HYDROCHLORIDE Gravol Hydrochlorothiazide Hytrin Ilosone Imitrex Inderal Indocin Isordil Isosorbide Itraconazole K-Dur Keflex Ketoconazole Lamisil Lamisil Cream Lanoxin Lansoprazole Lasix Latanoprost Levaquin Levitra Levofloxacin Levothroid Levoxyl Lipitor Lisinopril Lopid Lopressor Loratadine Lotensin Lotrel Lotrel Lotrimin Macrobit Macrodantin Meridia Metformin Metoprolol Metronidazole Miconazole Misoprostol Mobic Moduretic Monistat Motrin Naprosyn Neurontin Nexium Nimesulide Nizoral Nolvadex Norvasc Ocuflox Ovral - G Ovral - L Oxybutynin Panadol Paxil Pepcid Phenergan Pioglitazone Piroxicam Plavix Pletal Pravachol Precose Prednisolone Premarin Premphase Premphase Cycle Prevacid Prevacid Prilosec Promethazine Propecia Propranolol Propranolol Propulsid Protonix Provera Prozac Rabeprazole Ramipril Ranitidine Retin-A Risperdal Rofecoxib Sertraline HCL Sibutramine Sildenafil Citrate Simvastatin Singulair Soma Sporanox Synthroid Tadalafil Tagamet Tamoxifen Temovate Tenormin