JFreeChart-XY 인터페이스 맵-UI에서 특정 데이터 강조

카탈로그

package jp.avaj.lib.chart;

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

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.xy.DefaultIntervalXYDataset;

import jp.avaj.lib.algo.ArListOnMap;
import jp.avaj.lib.algo.ArMap;

/**
■ JFreeChart-XYインターヴァルチャート-UIで特定データを強調する

・複数のデータが表示されていると分かりにくいことがある。
・ArcCategoryPlotEmphasizeWinを使うと、データ選択画面が表示され、特定のデータを強調表示できる.
・強調の方法はArcEmphasizeに定義されており、以下の方法がある。
  ・ITEM ⇒ ポイントを大きく表示する。
  ・LINE ⇒ 線を太く表示する。
  ・BLINK ⇒ ブリンクさせる.該当データを本来の色とグレイで交互表示する。0.5秒間隔。
・本サンプルではBLINKを使用する。

 */
public class Chart14_02 {
  // 目次-インターヴァルチャート-IntervalChart-DefaultIntervalXYDatasetを使用したもの
  A_Chart14 a_Chart14;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    // DefaultIntervalXYDatasetの生成
    DefaultIntervalXYDataset ds;
    {
      ArListOnMap<String,Chart14_01_Data> listOnMap = createData();
      // シリーズ名をbだけ変更する
      Map<String,String> names = ArMap.construct("b=B");
      ds = ArcDefaultIntervalXYDataset.create(listOnMap,names,"x","xStart","xEnd","y","yStart","yEnd");
    }
    //
    XYBarRenderer  renderer = new XYBarRenderer ();
    renderer.setUseYInterval(true); // これを指定しないと単なる縦棒になってしまう⇒Xには同様の指定はない
    // Plotを作成して画面を表示する
    XYPlot plot = new XYPlot(ds,new NumberAxis(),new NumberAxis(),renderer);
    JFreeChart jfreeChart = new JFreeChart("XYインターヴァルチャート",(Plot)plot);
    ChartFrame cFrame = new ChartFrame("XYインターヴァルチャート",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);

    // UIを起動する
    new ArcXYPlotEmphasizeWin(cFrame,plot,ArcEmphasize.BLINK);
  }

  private static ArListOnMap<String,Chart14_01_Data> createData() {
    List<Chart14_01_Data> list;
    Map<String,List<Chart14_01_Data>> map = new HashMap<String,List<Chart14_01_Data>>();
    list = new ArrayList<Chart14_01_Data>();
    list.add(new Chart14_01_Data(2.0D,1.9D,2.2D,2.5D,2.4D,2.7D));
    list.add(new Chart14_01_Data(3.0D,2.9D,3.1D,3.5D,2.5D,4.0D));
    list.add(new Chart14_01_Data(4.5D,4.4D,4.6D,4.5D,3.5D,4.0D));
    map.put("a",list);
    list = new ArrayList<Chart14_01_Data>();
    list.add(new Chart14_01_Data(0.8D,0.9D,1.2D,4.5D,4.4D,4.7D));
    list.add(new Chart14_01_Data(2.5D,2.6D,2.7D,3.5D,3.5D,3.0D));
    list.add(new Chart14_01_Data(5.0D,4.9D,5.1D,3.1D,3.0D,3.2D));
    map.put("b",list);
    return ArListOnMap.construct(map);
  }

  public static class Chart14_01_Data {
    public Chart14_01_Data(double x,double xStart,double xEnd,double y,double yStart,double yEnd) {
      this.x = x;
      this.xStart = xStart;
      this.xEnd = xEnd;
      this.y = y;
      this.yStart = y;
      this.yEnd = yEnd;
    }
    double x;
    double xStart;
    double xEnd;
    double y;
    double yStart;
    double yEnd;
    public double getX() {
      return x;
    }
    public void setX(double x) {
      this.x = x;
    }
    public double getXStart() {
      return xStart;
    }
    public void setXStart(double xStart) {
      this.xStart = xStart;
    }
    public double getXEnd() {
      return xEnd;
    }
    public void setXEnd(double xEnd) {
      this.xEnd = xEnd;
    }
    public double getY() {
      return y;
    }
    public void setY(double y) {
      this.y = y;
    }
    public double getYStart() {
      return yStart;
    }
    public void setYStart(double yStart) {
      this.yStart = yStart;
    }
    public double getYEnd() {
      return yEnd;
    }
    public void setYEnd(double yEnd) {
      this.yEnd = yEnd;
    }
  }
}


JFreeChart 샘플

좋은 웹페이지 즐겨찾기