JFreeChart-バーチャート-UIで特定データを強調する


目次 ⇒ [JFreeChartサンプル](https://qiita.com/artery/items/3e9c63e5c14a9e965c97)

```java

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


```

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278568/ebcf2a4b-d559-f322-b400-eac67e5ae6ed.png)


![無題-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278568/7cd71f02-7762-fe20-db20-cb0bcc16e553.png)