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


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

```java

package jp.avaj.lib.chart;

import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBubbleRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYDataset;

/**
■ JFreeChart-バブルチャート-UIで特定データを強調する

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


・参考
  ・DefaultXYZDatasetは以下のメソッドを持っている.
    addSeries(java.lang.Comparable seriesKey, double[][] data)
    dataはdouble[3][N]は次の構造.
       [0][N]:x値
       [1][N]:y値
       [2][N]:z値
 */
public class Chart10_03 {
  // 目次-バブルチャート(BubbleChart)
  A_Chart10 a_Chart10;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;

  public static void main(String[] args) {
    // 表示データの作成
    DefaultXYZDataset dataSet = new DefaultXYZDataset();
    {
      // xの値
      double[] xValues = { 2.1D, 2.3D, 2.3D, 2.2D, 2.2D, 1.8D, 1.8D, 1.9D, 2.3D, 3.8D};
      // yの値
      double[] yValues = {14.1D,11.1D,10.0D, 8.0D, 8.1D, 8.4D, 5.4D, 4.1D, 4.1D,25.0D};
      // Zの値(円の大きさ)
      double[] zValues = { 2.4D, 2.7D, 2.7D, 2.2D, 2.2D, 2.2D, 2.1D, 2.2D, 1.6D, 4.0D};
      double[][] arrayOfDouble = {xValues,yValues,zValues};
      dataSet.addSeries("A",arrayOfDouble);
    }
    {
      // xの値
      double[] xValues = { 3.1D, 0.3D, 1.7D, 0.2D, 1.2D, 0.8D, 0.8D, 0.9D, 0.3D, 2.8D};
      // yの値
      double[] yValues = {20.1D,11.1D,10.0D, 8.0D, 8.1D, 8.4D, 5.4D, 4.1D, 4.1D,20.0D};
      // Zの値(円の大きさ)
      double[] zValues = { 2.4D, 2.7D, 2.7D ,2.2D, 2.2D, 2.2D, 2.1D, 2.2D, 1.6D, 4.0D};
      double[][] arrayOfDouble = {xValues,yValues,zValues};
      dataSet.addSeries("B",arrayOfDouble);
    }
    // レンダラの指定⇒バブルチャート用のレンダラがある、引数は下記のものがあるがSCALE_ON_RANGE_AXISを指定すること
    //  (one of: SCALE_ON_BOTH_AXES, SCALE_ON_DOMAIN_AXIS, SCALE_ON_RANGE_AXIS).
    XYBubbleRenderer renderer = new XYBubbleRenderer(XYBubbleRenderer.SCALE_ON_RANGE_AXIS);
    // X軸,はみ出したりしないためにマージンを設定する、注、Rangeでもよい
    // ⇒ LowerMarginは効かないみたい
    NumberAxis xAxis = new NumberAxis();
    xAxis.setLowerMargin(0.1D);
    xAxis.setUpperMargin(0.1D);
    // Y軸,はみ出したりしないためにマージンを設定する、注、Rangeでもよい
    // ⇒ LowerMarginは効かないみたい
    NumberAxis yAxis = new NumberAxis();
    yAxis.setLowerMargin(0.1D);
    yAxis.setUpperMargin(0.1D);
    // PlotはXYPlotを使う
    XYPlot xyPlot = new XYPlot((XYDataset)dataSet,(ValueAxis)xAxis,(ValueAxis)yAxis,renderer);
    JFreeChart jfreeChart = new JFreeChart("BubbleChart",(Plot)xyPlot);
    //
    ChartFrame cFrame = new ChartFrame("BubbleChart",(JFreeChart)jfreeChart);
    cFrame.pack();
    cFrame.setVisible(true);

    //　UI画面を表示する
    new ArcXYPlotEmphasizeWin(cFrame,xyPlot,ArcEmphasize.BLINK);
  }
}


```

![無題-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278568/1fc4853b-80c0-7f05-27a8-6d8d30e93f6f.png)

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278568/62b3480e-80dd-ae1b-cd1a-1a6da76010de.png)