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-二次元分布チャート-XYSeriesCollection-特定データを強調する

Posted at

目次 ⇒ JFreeChartサンプル

package jp.avaj.lib.chart;

import java.awt.Rectangle;
import java.awt.Shape;
import java.lang.reflect.InvocationTargetException;
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.NumberAxis;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import jp.avaj.lib.algo.ArUtil;
import jp.avaj.lib.test.L;

/**
■ JFreeChart-二次元分布チャート-XYSeriesCollection-特定データを強調する

 */
public class Chart15_04 {
  // 目次-二次元分布チャート
  A_Chart15 a_Chart15;
  // 目次-Artery-JFreeChart用のライブラリ
  A_Chart00 a_LibChartSampeContents;


  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    XYSeriesCollection dataSet = createXYDataset();
    // (1)レンダラの指定
    // 最初の引数はラインを引くかどうか⇒今回はラインは引かない
    // 次の引数はデータの場所に形を表示するか否か⇒今回は形を表示する.
    XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(false,true);
    // 軸の指定
    NumberAxis xAxis = new NumberAxis();
    NumberAxis yAxis = new NumberAxis();
    // Plotの生成
    XYPlot xyPlot = new XYPlot((XYDataset)dataSet,xAxis,yAxis,(XYItemRenderer)renderer);
    // チャートを表示する
    JFreeChart jfreeChart = new JFreeChart("XYPlot",(Plot)xyPlot);
    ChartFrame cFrame = new ChartFrame("XYPlot",(JFreeChart)jfreeChart);  // (1)
    cFrame.pack();
    cFrame.setVisible(true);

    /*
    特定データを強調する⇒レンダラを個別設定する
    レンダラはplotからインデックス指定で取得できる.しかしキー(本例ではSn)からは取得できない.
    なのでインデックスとキーを自分で管理するか、キー⇒インデックスの関係をdatasetから取得する.
    ここではdatesetから取得する方法で行う.
    */
    {
      // 目で確認するために、少し休む
      ArUtil.sleep(2000);
      // S2データを強調したい.
      int index = dataSet.indexOf("S2");
      L.p("index="+index);
      // Plotのレンダラを取得する
      XYItemRenderer ren = xyPlot.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);
    }
  }

  /** 表示データ(XYSeriesCollection)を作成する */
  public static XYSeriesCollection createXYDataset() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    XYSeriesCollection xySeriesCollection = new XYSeriesCollection();
    Random ran = new Random();
    for (int series = 0; series<5; series++) {
      List<Z_XYPlotSample_11_Data> list = new ArrayList<Z_XYPlotSample_11_Data>();
      for (int item = 0; item<10; item++) {
        double x = ran.nextDouble()*10;
        double y = x+ran.nextDouble()*5;
        list.add(new Z_XYPlotSample_11_Data(x,y));
      }
      // ListからXYSeriesを生成する、x値,y値を取得するフィールド名を指定する
      XYSeries xySeries = ArcXYSeries.create("S"+series,list,"x","y");
      // XYSeriesCollecitonに追加する
      xySeriesCollection.addSeries(xySeries);
    }
    return xySeriesCollection;
  }
  /** 元データを格納するクラス */
  public static class Z_XYPlotSample_11_Data {
    public Z_XYPlotSample_11_Data(double x,double y) {
      this.x = x;
      this.y = y;
    }
    private double x;
    private double y;
    public double getX() {
      return x;
    }
    public void setX(double x) {
      this.x = x;
    }
    public double getY() {
      return y;
    }
    public void setY(double y) {
      this.y = y;
    }
  }
}


無題.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?