JFreeChart - 다이어그램 - De f au u t MultiValue Category Dataset - 특정 데이터의 강조

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

import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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.ScatterRenderer;
import org.jfree.data.statistics.DefaultMultiValueCategoryDataset;

import jp.avaj.lib.algo.ArUtil;

/**
■ JFreeChart-複数値チャート-DefaultMultiValueCategoryDataset-特定データの強調
・同一キーに複数の値があるDataset.
・ScatterRendererで表示する

 */
public class Chart13_01 {
  // 目次-DefaultMultiValueCategoryDatasetを利用したチャート
  A_Chart13 a_Chart13;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データの作成
    DefaultMultiValueCategoryDataset dataSet = null;
    {
      final int ROW = 3;
      final int COL = 4;
      Random ran = new Random();
      dataSet = new DefaultMultiValueCategoryDataset();
      List<Double> list;
      for (int row=0; row<ROW; row++) {
        for (int col=0; col<COL; col++) {
          list = new ArrayList<Double>();
          for (int i=0; i<3; i++) {
            list.add((double)ran.nextInt(100));
          }
          dataSet.add(list,"ROW"+row,"COL"+col);
        }
      }
    }
    // 軸の設定
    CategoryAxis xAxis = new CategoryAxis("商品");
    NumberAxis yAxis = new NumberAxis("売上");
    // レンダラの設定
    ScatterRenderer renderer = new ScatterRenderer();
    // Plotの作成
    CategoryPlot plot = new CategoryPlot(dataSet,xAxis,yAxis,renderer);
    //
    JFreeChart jfreeChart = new JFreeChart("ScatterRenderer",(Plot)plot);
    ChartFrame cFrame = new ChartFrame("ScatterRenderer",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);
    /*
    特定データの強調、レンダラを個別設定する
    レンダラはplotからキー指定で取得できる.
    なのでインデックスとキーを自分で管理するか、キー⇒インデックスの関係をdatasetから取得する.
    ここではdatesetから取得する方法で行う.
    */
    {
      // 目で確認するために、少し休む
      ArUtil.sleep(2000);
      // ROW1データを強調したい.
      int index = dataSet.getRowIndex("ROW1");
      // Plotのレンダラを取得する
      ScatterRenderer ren = (ScatterRenderer)plot.getRenderer();
      // Shapeを取得する 本当は元の大きさを正確に取得して二倍すべき
//      Shape shape = ren.getBaseShape();
//      Rectangle rec = shape.getBounds();
      // 大きさを二倍にする
      Rectangle newRec = new Rectangle();
      newRec.setRect(-6,-6,12,12); // 本当は元の大きさを正確に取得して二倍すべき
      // 二倍にしたShapeをindexを指定して設定する
      ren.setSeriesShape(index,newRec);

      // 目で確認するために、少し休む
      ArUtil.sleep(12000);
      // 元の大きさに戻す
      ren.setSeriesShape(index,null);
    }
  }
}

JFreeChart 샘플

좋은 웹페이지 즐겨찾기