目次 ⇒ 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;
}
}
}