目次 ⇒ JFreeChartサンプル
package jp.avaj.lib.chart;
import java.lang.reflect.InvocationTargetException;
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.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
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.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import jp.avaj.lib.algo.ArMatrix;
import jp.avaj.lib.def.ArSortDir;
/**
■ JFreeChart-バーチャート-UIで特定データを強調する
・複数のデータが表示されていると分かりにくいことがある。
・ArcCategoryPlotEmphasizeWinを使うと、データ選択画面が表示され、特定のデータを強調表示できる.
・強調の方法はArcEmphasizeに定義されており、以下の方法がある。
・ITEM ⇒ ポイントを大きく表示する。
・LINE ⇒ 線を太く表示する。
・BLINK ⇒ ブリンクさせる.該当データを本来の色とグレイで交互表示する。0.5秒間隔。
・本サンプルではBLINKを使用する。
*/
public class Chart07_11 {
// 目次-バーチャート(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 {
// 表示データを生成する
CategoryDataset dataset = createDataset();
// X軸
CategoryAxis domainAxis = new CategoryAxis();
// Y軸
ValueAxis rangeAxis = new NumberAxis();
// レンダラ
BarRenderer renderer = new BarRenderer();
// PlotはCategoryPlot
CategoryPlot plot = new CategoryPlot(dataset,domainAxis,rangeAxis,(CategoryItemRenderer)renderer);
JFreeChart jfreeChart = new JFreeChart("売上集計",(Plot)plot);
//
ChartFrame cFrame = new ChartFrame("売上集計",(JFreeChart)jfreeChart);
cFrame.pack();
cFrame.setVisible(true);
//
// UIを起動する
new ArcCategoryPlotEmphasizeWin(cFrame,plot,ArcEmphasize.BLINK);
}
/** MatrixからCatetoryDatasetを作成する */
private static CategoryDataset createDataset() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// 元データのArMatrixを作成する
ArMatrix<String,String,Chart07_02_Data> mat = new ArMatrix<String,String,Chart07_02_Data>();
mat.put(ITEM_0,DOMAIN_0,new Chart07_02_Data("A",100.0D));
mat.put(ITEM_0,DOMAIN_1,new Chart07_02_Data("B",44.0D));
mat.put(ITEM_0,DOMAIN_2,new Chart07_02_Data("C",93.0D));
mat.put(ITEM_1,DOMAIN_0,new Chart07_02_Data("D",80.0D));
mat.put(ITEM_1,DOMAIN_1,new Chart07_02_Data("E",75.0D));
mat.put(ITEM_1,DOMAIN_2,new Chart07_02_Data("F",15.0D));
// ArMatrixをDefaultCategoryDatasetに変換する
// 商品名と地域名を昇順にソートしてDefaultCategoryDatasetを作成する
DefaultCategoryDataset catDataSet = ArcDefaultCategoryDataset.create(mat,"value",ArSortDir.ASCEND,ArSortDir.ASCEND);
return catDataSet;
}
/** 売上データのクラス */
public static class Chart07_02_Data {
public Chart07_02_Data(String tantosha,Double value) {
this.tantosha = tantosha;
this.value = value;
}
private String tantosha;
private Double value;
public String getTantosha() {
return tantosha;
}
public void setTantosha(String tantosha) {
this.tantosha = tantosha;
}
public Double getValue() {
return value;
}
public void setValue(Double value) {
this.value = value;
}
}
}