LoginSignup
0
0

More than 3 years have passed since last update.

JFreeChart-DateAxis

Last updated at Posted at 2019-07-19

目次 ⇒ JFreeChartサンプル

package jp.avaj.lib.chart;

import java.util.Random;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.DateTickUnitType;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;

import jp.avaj.lib.algo.ArDate;

/**
■ JFreeChart-DateAxis
・X値は日時のデータで、その基底クラスはRegularTimePeriod.
・DatasetはTimeSeriesCollectionなどを使用する.注、名称がDatasetではないが、Datasetを実装.

 */
public class Chart18_11 {
  // 目次-時系列データの表示.
  A_Chart15 a_Chart15;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データを作成する
    TimeSeriesCollection ds = createData();
    // レンダラ
    // 最初の引数はラインを引くかどうか⇒今回はラインは引く
    // 次の引数はデータの場所に形を表示するか否か⇒今回は形を表示する.
    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true,true);
    // X軸はDateAxis
    DateAxis xAxis = new DateAxis();
    // 軸の表示単位を設定する,1は一日単位の意味,2にすれば二日ごとに表示する.
    xAxis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY,1));
    NumberAxis yAxis = new NumberAxis();
    // Plotを作成してチャートを表示する
    XYPlot xyPlot = new XYPlot(ds,xAxis,yAxis,(XYItemRenderer)renderer);
    JFreeChart jfreeChart = new JFreeChart("売上推移",(Plot)xyPlot);
    ChartFrame cFrame = new ChartFrame("売上推移",(JFreeChart)jfreeChart);  // (1)
    cFrame.pack();
    cFrame.setVisible(true);
  }
  // 表示データを作成する
  private static TimeSeriesCollection createData() {
    // 商品名の定義
    final String[] items = new String[]{"A","B","C"};
    // 最初の日
    final ArDate startDate = new ArDate(2030,7,1);
    Random ran = new Random();
    TimeSeriesCollection ds = new TimeSeriesCollection();
    for (int item=0; item<items.length; item++) {
      ArDate arDate = (ArDate)startDate.clone();
      // 商品名でTimeSeriesを作成する
      TimeSeries series = new TimeSeries(items[item]);
      for (int day=0; day<5; day++) {
        // 日付をRegularTimePeriodに変換する,RegularTimePeriodの派生クラスはいろいろある.
        Day date = ArcDay.fromArDate(arDate); // DateやCalendarやlongでも可能
        // 売上 ⇒ サンプルなので適当.
        int sales = item*10+ran.nextInt(10);
        // 売上データを作成してSeriesに追加する
        TimeSeriesDataItem dataItem = new TimeSeriesDataItem(date,sales);
        series.add(dataItem);
        // 次の日
        arDate.forward(1);
      }
      // TimeSeriesをTimeSeriesCollectionに追加.
      ds.addSeries(series);
    }
    return ds;
  }
}

無題.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0