JFreeChart-술집 그림 쌓기 - Default Category Dataset-특정 데이터의 강조

카탈로그
package jp.avaj.lib.chart;

import java.util.ArrayList;
import java.util.List;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

import jp.avaj.lib.algo.ArTuple;
import jp.avaj.lib.algo.ArUtil;

/**
■ JFreeChart-積上バーチャート-DefaultCategoryDataset-特定データの強調

・積上バーチャートでは一番下以外のデータは変化が分かりにくいので、順番を入れ替え一番下に表示してみる.

・問題点、色が前と変化するので分かりにくい.rotateRowを汎用的に作る必要がある.
  ・しかし方式は確認できた.
 */
public class Chart08_02 {
  // 目次-積上げバーチャート(StackedBarChart)
  A_Chart08 a_Chart08;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データの作成
    DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
    {
      //
      dataSet.addValue(136.5,"商品A","2014");
      dataSet.addValue(206.1,"商品A","2015");
      dataSet.addValue(296.7,"商品A","2016");
      //
      dataSet.addValue( 40.5,"商品B","2014");
      dataSet.addValue(105.7,"商品B","2015");
      dataSet.addValue(199.4,"商品B","2016");
      //
      dataSet.addValue(150.5,"商品C","2014");
      dataSet.addValue(87.5,"商品C","2015");
      dataSet.addValue(40.0,"商品C","2016");
    }
    //
    CategoryAxis catAxis = new CategoryAxis();
    NumberAxis numAxis = new NumberAxis();
    // 積上棒グラフにはStackedBarRendererを使用する
    StackedBarRenderer renderer = new StackedBarRenderer();
    CategoryPlot catPlot = new CategoryPlot(dataSet,catAxis,numAxis,(CategoryItemRenderer)renderer); // (1)
    JFreeChart jfreeChart = new JFreeChart("売上構成の変化",(Plot)catPlot);
    //
    ChartFrame cFrame = new ChartFrame("売上構成の変化",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);
    //
    // 商品Bの売上の変化を掴みたいので、商品Bを一番下に表示する
    {
      // 目で確認するために、少し休む
      ArUtil.sleep(2000);
      //
      rotateRow(dataSet);
    }
  }
  private static void rotateRow(DefaultCategoryDataset dataSet) {
    int colms = dataSet.getColumnCount();
    Comparable rowKey = dataSet.getRowKey(0);
    List<ArTuple> values = new ArrayList();
    for (int col=0; col<colms; col++) {
      Comparable colKey = dataSet.getColumnKey(col);
      values.add(new ArTuple(colKey,dataSet.getValue(rowKey,colKey)));
    }
    dataSet.removeRow(rowKey);
    for (int i=0; i<values.size(); i++) {
      dataSet.addValue((Double)(values.get(i).getV1()),rowKey,(Comparable)values.get(i).getV0());
    }
  }
}

JFreeChart 샘플

좋은 웹페이지 즐겨찾기