LoginSignup
1
0

More than 3 years have passed since last update.

JFreeChart-ExtendedCategoryAxis-軸の値に補足説明をつける

Last updated at Posted at 2019-07-18

目次 ⇒ JFreeChartサンプル

package jp.avaj.lib.chart;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ExtendedCategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.util.SortOrder;

import jp.avaj.lib.def.ArSortDir;

/**
■ JFreeChart-ExtendedCategoryAxis-軸の値に補足説明をつける

・本サンプルは商品の地域別売上を示すもの.
・地域の名前での表示に加えて、内部的に使用している地域コードを付加する.

 */
public class Chart18_09 {
  // 目次-バーチャート(BarChart)
  A_Chart07 a_Chart07;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  static final String ITEM_0 = "商品0";
  static final String ITEM_1 = "商品1";
  static final String DOMAIN_0 = "地域0";
  static final String DOMAIN_1 = "地域1";
  static final String DOMAIN_2 = "地域2";

  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    //
    // DefaultCategoryDatasetを使用する
    // DefaultCategoryDatasetの作成機能は、ArcDefaultCategoryDatasetにまとめられている
    // DefaultCategoryDatasetは、いくつかのデータ構造から作成できる
    // ここでは二段Mapから作成する.詳細はArcDefaultCategoryDatasetの解説を参照.
    // バーチャートの表示順制御については、ArcDefaultCategoryDatasetの解説を参照のこと.
    DefaultCategoryDataset catDataSet = createData();
      //
    ExtendedCategoryAxis xAxis = new ExtendedCategoryAxis("商品");
    // 地域コードを付加する ⇒ addとなっているが、複数追加はできない、最後が有効.
    xAxis.addSubLabel("地域0","10");
    xAxis.addSubLabel("地域1","11");
    xAxis.addSubLabel("地域2","12");
    NumberAxis yAxis = new NumberAxis("売上");
    BarRenderer renderer = new BarRenderer();
    CategoryPlot catPlot = new CategoryPlot(catDataSet,xAxis,yAxis,(CategoryItemRenderer)renderer);
    catPlot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
    catPlot.setColumnRenderingOrder(SortOrder.ASCENDING);
    catPlot.setRowRenderingOrder(SortOrder.ASCENDING);
    //catPlot.setOrientation(PlotOrientation.HORIZONTAL);
    JFreeChart jfreeChart = new JFreeChart("売上集計",(Plot)catPlot);
    //
    ChartFrame cFrame = new ChartFrame("売上集計",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);
  }
  private static DefaultCategoryDataset createData() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
  {
    // 元データの二段Mapの作成
    Map<String,Map<String,Chart07_04_Data>> mapMap = new HashMap<String,Map<String,Chart07_04_Data>>();
    {
      Map<String,Chart07_04_Data> map = new HashMap<String,Chart07_04_Data>();
      map.put(  DOMAIN_0,new Chart07_04_Data("A",100.0D));
      map.put(DOMAIN_1,new Chart07_04_Data("B",44.0D));
      map.put(DOMAIN_2,new Chart07_04_Data("C",93.0D));
      mapMap.put(ITEM_0,map);
    }
    {
      Map<String,Chart07_04_Data> map = new HashMap<String,Chart07_04_Data>();
      map.put(DOMAIN_0,new Chart07_04_Data("D",80.0D));
      map.put(DOMAIN_1,new Chart07_04_Data("E",75.0D));
      map.put(DOMAIN_2,new Chart07_04_Data("F",15.0D));
      mapMap.put(ITEM_1,map);
    }
    // DefaultCategoryDatasetに変換する
    // 商品名と地域名を昇順にソートしてDatasetを作成する
    // 値を取得するフィールド名を指定する
    DefaultCategoryDataset catDataSet = ArcDefaultCategoryDataset.create(mapMap,"value",ArSortDir.ASCEND,ArSortDir.ASCEND);
    return catDataSet;
  }

  public static class Chart07_04_Data {
    public Chart07_04_Data(String tantou,Double value) {
      this.tantou = tantou;
      this.value = value;
    }
    private String tantou;
    private Double value;
    public String getTantou() {
      return tantou;
    }
    public void setTantou(String tantou) {
      this.tantou = tantou;
    }
    public Double getValue() {
      return value;
    }
    public void setValue(Double value) {
      this.value = value;
    }
  }
}

無題.png

1
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
1
0