JFreeChart – ウィンドチャートを作成するには


ウィンドチャートを作成するには
ChartFactoryクラスのcreateWindPlotメソッドを使用します。

package net.tk_factory.example.jfreechart;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import net.tk_factory.example.AbstractExample;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.data.xy.DefaultWindDataset;
import org.jfree.data.xy.WindDataset;

/**
 * JFreeChartを使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>ウィンドチャートを作成します。</li>
 * <li>ChartUtilitiesクラスを使用して、PNG形式で画像を出力します。</li>
 * </ol>
 *
 * @author Takafumi Kondo (TK Factory)
 */
public class ExampleCreateWindPlot extends AbstractExample
{
    /** クラス名 */
    private static final String CLASS_NAME =
            ExampleCreateWindPlot.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
            Logger.getLogger(ExampleCreateWindPlot.class.getName());

    /** 出力ファイル名(PNG形式) */
    private static final String OUT_FILE_NAME_PNG =
            EXAMPLE_FILE_DIRECTORY +  CLASS_NAME + ".png";

    /**
     * ExampleCreateWindPlotオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected ExampleCreateWindPlot()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * mainメソッドです。<br/>
     *
     * @param args 引数
     */
    public static void main(String[] args)
    {
        LOGGER.info("[START]" + CLASS_NAME);

        FileOutputStream png = null;

        try
        {
            //すでに出力ファイルが存在している場合は削除する
            deleteExistsFile(OUT_FILE_NAME_PNG);

            //レガシーテーマを設定する
            ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

            //ウィンドチャートのデータを設定する
            String[] seriesNames =
            {
                "A測定場所",
            };
            Object[][] seriesData = new Object[][]
            {
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 1), 0, 10),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 2), 1, 8),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 3), 2, 10),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 4), 3, 10),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 5), 4, 7),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 6), 5, 10),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 7), 6, 8),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 8), 7, 11),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 9), 8, 10),
                createItem(getTimeInMillis(2009, Calendar.JANUARY, 10), 9, 11),
            };
            Object[][][] data =
            {
                seriesData,
            };
            WindDataset dataset = new DefaultWindDataset(seriesNames, data);

            //ウィンドチャートを生成する
            JFreeChart chart = ChartFactory.createWindPlot(
                    //・グラフタイトル
                    "風向/風力",
                    //・カテゴリ軸ラベル
                    "日付",
                    //・値軸ラベル
                    "風向/風力",
                    //・データセット
                    dataset,
                    //・凡例の表示有無
                    true,
                    //・ツールチップの表示有無
                    false,
                    //・URL動的生成の有無
                    false);

            //PNG形式でファイルへ保存する
            png = new FileOutputStream(OUT_FILE_NAME_PNG);
            ChartUtilities.writeChartAsPNG(png, chart, 600, 400);
        }
        catch (IOException ioex)
        {
            LOGGER.error(getStackTrace(ioex));
        }
        finally
        {
            try
            {
                if (png != null)
                {
                    png.close();
                }
            }
            catch (IOException ioex)
            {
                LOGGER.error(getStackTrace(ioex));
            }

            LOGGER.info("[E N D]" + CLASS_NAME);
        }
    }

    /**
     * 指定された年/月/日からUTCミリ秒値を取得します。<br/>
     *
     * @param year 年
     * @param month 月
     * @param day 日
     * @return UTCミリ秒値
     */
    private static long getTimeInMillis(int year, int month, int day)
    {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month, day, 12, 0);
        return calendar.getTimeInMillis();
    }

    /**
     * 指定されたUTCミリ秒値/風向/風力をウィンドチャートに表示する
     * データ型に変換します。<br/>
     *
     * @param millis UTCミリ秒値
     * @param dir 風向
     * @param force 風力
     * @return
     */
    private static Object[] createItem(long millis, int dir, int force)
    {
        Object[] object =
        {
            new Date(millis),
            new Integer(dir),
            new Integer(force),
        };
        return object;
    }
}

作成されるファイルはこんな感じです。
ExampleCreateWindPlot

関連記事

  1. 日本語の文字化け対策として、レガシーテーマを設定するように変更しました。

  2. ソースを見直し、一部、修正しました。

  1. トラックバック 0

return top