|
|
JFreeChart を使ったグラフ作成 ウェハマップ(WaferMap) |
H.Kamifuji . |
ウェハマップの作成に関して確認します。ウェハマップについてはどういった使われ方をするのかよく分からないのですが、ICチップの製造で使う半導体基板のようなグラフを格子状に分割し、各格子の値を表現するものです。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 現在(2021/08)では、JDK-16.0.2 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2023/04)では、JDK-20.0.1 にアップされています。一部、上位互換について、見直しを行っていきます。 現在(2024/10)では、JDK-23 に、アップされています。JDK-23 + jfreechart-1.0.19 で、上位互換について、見直しを行っていきます。 |
|
ウェハマップの基本的な作成方法を確認します。 まずChartFactoryクラスの「createWaferMapChart」メソッドを使ってウェハマップを扱うJFreeChartクラスのオブジェクトを作成します。 createWaferMapChart public static JFreeChart createWaferMapChart(java.lang.String title, WaferMapDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls)Creates a wafer map chart. Parameters: title - the chart title (null permitted). dataset - the dataset (null permitted). orientation - the plot orientation (horizontal or vertical) (null NOT permitted.) legend - display a legend? tooltips - generate tooltips? urls - generate URLs? Returns: A wafer map chart. 1番目の引数にグラフのタイトルを文字列で指定します。 2番目の引数にはグラフのデータをWaferMapDatasetクラスのオブジェクトで指定します。詳細は次のページで確認します。 3番目の引数には棒グラフの向きを指定します。指定可能な値はorg.jfree.chart.plot.PlotOrientationクラスで定義されており、次のどちらかとなります。 PlotOrientation.VERTICAL デフォルト PlotOrientation.HORIZONTAL X軸とY軸が反転4番目の引数には凡例を表示するかどうかを「true」か「false」で指定します。 5番目の引数にはツールチップを作成するかどうかを「true」か「false」で指定します。 6番目の引数にはURLを作成するかどうかを「true」か「false」で指定します。 実際の使い方は次のようになります。 WaferMapDataset data = new WaferMapDataset(20, 20); JFreeChart chart = ChartFactory.createWaferMapChart("ウェハマップ", data, PlotOrientation.VERTICAL, true, false, false);実際のデータの追加方法は次のページで確認します。 では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。/** * ウェハマップの作成(createWaferMapChartメソッド) */ import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.data.general.WaferMapDataset; import org.jfree.chart.plot.PlotOrientation; import javax.swing.JFrame; import java.awt.BorderLayout; import org.jfree.chart.ChartPanel; public class Test1_1 extends JFrame{ public static void main(String[] args) { Test1_1 frame = new Test1_1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 500, 500); frame.setTitle("グラフサンプル"); frame.setVisible(true); } Test1_1(){ WaferMapDataset data = new WaferMapDataset(20, 20); JFreeChart chart = ChartFactory.createWaferMapChart("ウェハマップ", data, PlotOrientation.VERTICAL, true, false, false); ChartPanel cpanel = new ChartPanel(chart); getContentPane().add(cpanel, BorderLayout.CENTER); } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
ウェハマップでは全てのデータを管理するWaferMapDatasetクラスのオブジェクトを作成します。 WaferMapDatasetクラスのクラス図は次のようになっています。 java.lang.Object | +- org.jfree.data.general.AbstractDataset | +- org.jfree.data.general.WaferMapDataset public class WaferMapDataset extends AbstractDatasetコンストラクタは2つ用意されています。1つだけ確認します。 WaferMapDataset public WaferMapDataset(int maxChipX, int maxChipY)Creates a new dataset using the default chipspace. Parameters: maxChipX - the wafer x-dimension. maxChipY - the wafer y-dimension. 1番目の引数にはX軸方向の分割数、2番目の引数にはY軸方向の分割数を指定します。ここで指定した分割数でグラフとして表示される基盤が分割されます。 次のようにオブジェクトを作成します。 WaferMapDataset data = new WaferMapDataset(20, 20);続いてデータを登録していきます。 データの登録データを登録するにはWaferMapDatasetクラスで用意されている「addValue」メソッドを使います。addValue public void addValue(java.lang.Number value, java.lang.Comparable chipx, java.lang.Comparable chipy)Sets a value in the dataset. Parameters: value - the value. chipx - the x-index for the chip. chipy - the y-index for the chip. 2番目の引数には基板上のX軸方句の位置、3番目の引数には基板上のY軸方向の位置を指定します。そして1番目の引数にデータの値を指定します。 実際には次のように記述します。 WaferMapDataset data = new WaferMapDataset(20, 20); data.addValue(10, 4, 4); data.addValue(7, 8, 12);では簡単なサンプルを作成して試してみます。 サンプルプログラム下記のサンプルを実行してみよう。/** * ウェハマップのデータ(WaferMapDatasetクラス) */ import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.data.general.WaferMapDataset; import org.jfree.chart.plot.PlotOrientation; import javax.swing.JFrame; import java.awt.BorderLayout; import org.jfree.chart.ChartPanel; public class Test2_1 extends JFrame{ public static void main(String[] args) { Test2_1 frame = new Test2_1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 500, 500); frame.setTitle("グラフサンプル"); frame.setVisible(true); } Test2_1(){ JFreeChart chart = ChartFactory.createWaferMapChart("ウェハマップ", createData(), PlotOrientation.VERTICAL, false, false, false); ChartPanel cpanel = new ChartPanel(chart); getContentPane().add(cpanel, BorderLayout.CENTER); } private WaferMapDataset createData(){ WaferMapDataset data = new WaferMapDataset(20, 20); data.addValue(1, 2, 4); data.addValue(3, 12, 16); data.addValue(2, 9, 12); data.addValue(7, 5, 8); return data; } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() グラフには何も変化がありませんでした。また「createWaferMapChart」メソッドの4番目の引数に「true」を指定するとエラーが発生します。今のところ原因が分かっていません。分かり次第更新します。 [xxxxxxxx@dddddddddd images]$ javac -version javac 1.8.0_112 [xxxxxxxx@dddddddddd images]$上記のバージョンでは、エラーも無く、それなりに描画されます。 サンプルプログラム下記のサンプルを実行してみよう。/** * ウェハマップのデータ(WaferMapDatasetクラス) */ import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.data.general.WaferMapDataset; import org.jfree.chart.plot.PlotOrientation; import javax.swing.JFrame; import java.awt.BorderLayout; import org.jfree.chart.ChartPanel; public class Test2_2 extends JFrame{ public static void main(String[] args) { Test2_2 frame = new Test2_2(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 500, 500); frame.setTitle("グラフサンプル"); frame.setVisible(true); } Test2_2(){ JFreeChart chart = ChartFactory.createWaferMapChart("ウェハマップ", createData(), PlotOrientation.VERTICAL, true, false, false); ChartPanel cpanel = new ChartPanel(chart); getContentPane().add(cpanel, BorderLayout.CENTER); } private WaferMapDataset createData(){ WaferMapDataset data = new WaferMapDataset(20, 20); data.addValue(1, 2, 4); data.addValue(3, 12, 16); data.addValue(2, 9, 12); data.addValue(7, 5, 8); return data; } }上記をコンパイルした後で実行すると次のように表示されます。 ![]() |
|