時系列グラフのデータ(TimeSeriesCollectionクラス)

広告

ガ時系列グラフのデータでは系列を作成し個々のデータを系列に登録していきます。そして系列毎にデータを追加していきます。最後に全ての系列を系列コレクションに追加します。

まずは系列コレクションを表すTimeSeriesCollectionクラスのオブジェクトを作成します。

TimeSeriesCollectionクラスのクラス図は次のようになっています。

  • java.lang.Object
  • org.jfree.data.general.AbstractDataset
  • org.jfree.data.general.AbstractSeriesDataset
  • org.jfree.data.xy.AbstractXYDataset
  • org.jfree.data.xy.AbstractIntervalXYDataset
  • org.jfree.data.time.TimeSeriesCollection
  • public class TimeSeriesCollection extends AbstractIntervalXYDataset implements XYDataset, IntervalXYDataset, DomainInfo, java.io.Serializable

コンストラクタは4つ用意されています。デフォルトのコンストラクタは次のようになっています。

Constructs an empty dataset, tied to the default timezone. 

次のようにオブジェクトを作成します。

TimeSeriesCollection data = new TimeSeriesCollection();

系列の登録

系列はTimeSeriesクラスを使います。TimeSeriesクラスは若干複雑なので詳細な使い方については「TimeSeriesクラス」で解説していますので参照して下さい。

TimeSeriesクラスのコンストラクタは3つ用意されています。系列名と系列の時間単位を指定するコンストラクタについて見てみます。

Creates a new (empty) time series with the specified name and class of 
RegularTimePeriod.

Parameters:
  name - the series name (null not permitted).
  timePeriodClass - the type of time period (null not permitted).

1番目の引数には系列の名前を指定します。2番目の引数には系列の時間単位を表すクラスを指定します。ここで時間単位とは時、分、日、月などです。時系列グラフは時間の推移に伴う値の変化を表すグラフであり、グラフの時間軸の単位を指定することになります。指定するには「RegularTimePeriod」クラスのサブクラスのいずれかとなりますが、ここでは月を表す「org.jfree.data.time.Month」クラスを使います。

TimeSeriesクラスのオブジェクト作成したらTimeSeriesCollectionクラスで用意されている「addSeries」メソッドを使って系列を追加していきます。

Adds a series to the collection and sends a DatasetChangeEvent to all 
registered listeners.

Parameters:
  series - the series (null not permitted).

引数には系列を表す「TimeSeries」クラスをのオブジェクトを指定します。

実際には次のように記述します。

TimeSeriesCollection data = new TimeSeriesCollection();

TimeSeries series = new TimeSeries("Aサイト");
data.addSeries(series);

これで系列が作成できました。最後に系列にデータを追加していきます。

データの登録

系列にデータを登録するにはTimeSeriesクラスで用意されている「add」メソッドを使います。

Adds a new data item to the series and sends a SeriesChangeEvent to all 
registered listeners.

Parameters:
  period - the time period (null not permitted).
  value - the value (null permitted).

1番目の引数には日時を表すTimeSeriesクラスのコンストラクタの2番目の引数で指定した「RegularTimePeriod」クラスのサブクラスのオブジェクトを指定します。今回は「org.jfree.data.time.Month」クラスのオブジェクトを指定します。2番目の引数には値を指定します。

今回は次のようなデータを元にグラフを作成してみます。

時間軸
2007/07120
2007/08140
2007/09150
2007/10190
2007/11230
2007/12280

実際には次のように記述します。

TimeSeriesCollection data = new TimeSeriesCollection();

TimeSeries series = new TimeSeries("Aサイト", Month.class);
series.add(new Month(7, 2007), 120);
series.add(new Month(8, 2007), 140);
series.add(new Month(9, 2007), 150);
series.add(new Month(10, 2007), 190);
series.add(new Month(11, 2007), 230);
series.add(new Month(12, 2007), 280);

data.addSeries(series);

今回は系列数が1つで、時系列の単位が月のものとなります。

サンプルプログラム

では簡単なサンプルを作成して試してみます。

Test2_1.java

import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.Month;

import javax.swing.JFrame;
import java.awt.BorderLayout;
import org.jfree.chart.ChartPanel;

public class Test2_1 extends JFrame{
  public static void main(String[] args) {
    Test2_1 frame = new Test2_1();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 500, 500);
    frame.setTitle("グラフサンプル");
    frame.setVisible(true);
  }

  Test2_1(){
    TimeSeriesCollection data = new TimeSeriesCollection();

    TimeSeries series = new TimeSeries("Aサイト", Month.class);
    series.add(new Month(7, 2007), 120);
    series.add(new Month(8, 2007), 140);
    series.add(new Month(9, 2007), 150);
    series.add(new Month(10, 2007), 190);
    series.add(new Month(11, 2007), 230);
    series.add(new Month(12, 2007), 280);

    data.addSeries(series);

    JFreeChart chart = 
      ChartFactory.createTimeSeriesChart("PV推移",
                                  "月",
                                  "PV",
                                  data,
                                  true,
                                  false,
                                  false);

    ChartPanel cpanel = new ChartPanel(chart);
    getContentPane().add(cpanel, BorderLayout.CENTER);
  }
}

上記をコンパイルした後で実行すると次のようにJavaアプリケーションが起動します。

時系列グラフのデータ(TimeSeriesCollectionクラス)

( Written by Tatsuo Ikura )