0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

目次 ⇒ JFreeChartサンプル


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;
    }
  }
}


無題.png

無題-1.png

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?