/********************************/ /* グラフの描画 */ /* coded by Y.Suganuma */ /********************************/ import java.awt.*; import java.applet.*; import java.awt.event.*; import java.util.*; public class Graph extends Applet { /****************/ /* 初期設定 */ /****************/ public void init() { int i1, i2, k1, kind, n_g = 0, n_p = 0, x_place, y_place; String title[] = new String [3]; // グラフ,x軸,及び,y軸のタイトル String g_title[]; // 凡例(グラフの内容) String x_title[]; // x軸への表示 double x_scale[] = new double [3]; // x軸目盛り double y_scale[] = new double [3]; // y軸目盛り double data_x[][], data_y[][]; // データ boolean d_t = true; // タイトル表示の有無 boolean d_g = true; // 凡例表示の有無 String str = getParameter("data"); StringTokenizer token; token = new StringTokenizer(str, ","); kind = Integer.parseInt(token.nextToken()); /* 棒グラフ グラフの種類 グラフタイトル x軸タイトル y軸タイトル グラフの数(n_g) 各グラフのタイトル(凡例)(n_g個) データの数(n_p) x軸への表示内容(n_p個) y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データ(n_p×n_g個) タイトル表示の有無 凡例表示の有無 */ if (kind == 0) { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); n_p = Integer.parseInt(token.nextToken()); x_title = new String [n_p]; for (i1 = 0; i1 < n_p; i1++) x_title[i1] = token.nextToken(); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_g = false; BarGraph gp = new BarGraph(title, g_title, x_title, y_scale, y_place, data_y, d_t, d_g); } /* 折れ線グラフ(1) グラフの種類 グラフタイトル x軸タイトル y軸タイトル グラフの数(n_g) 各グラフのタイトル(凡例)(n_g個) データの数(n_p) x軸への表示内容(n_p個) y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データ(n_p×n_g個) タイトル表示の有無 凡例表示の有無 */ else if (kind == 1) { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); n_p = Integer.parseInt(token.nextToken()); x_title = new String [n_p]; for (i1 = 0; i1 < n_p; i1++) x_title[i1] = token.nextToken(); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_g = false; LineGraph gp = new LineGraph(title, g_title, x_title, y_scale, y_place, data_y, d_t, d_g); } /* 折れ線グラフ(2) グラフの種類 グラフタイトル x軸タイトル y軸タイトル グラフの数(n_g) 各グラフのタイトル(凡例)(n_g個) x軸の最小値 x軸の最大値 x軸の刻み幅 x軸の小数点以下桁数 y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データの数(n_p) データ(2×n_p×n_g個,(x,y),(x,y),・・・の順) タイトル表示の有無 凡例表示の有無 */ else if (kind == 2) { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); x_scale[0] = Double.parseDouble(token.nextToken()); x_scale[1] = Double.parseDouble(token.nextToken()); x_scale[2] = Double.parseDouble(token.nextToken()); x_place = Integer.parseInt(token.nextToken()); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); n_p = Integer.parseInt(token.nextToken()); data_x = new double [n_g][n_p]; data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_x[i1][i2] = Double.parseDouble(token.nextToken()); for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_g = false; LineGraph gp = new LineGraph(title, g_title, x_scale, x_place, y_scale, y_place, data_x, data_y, d_t, d_g); } /* 積み上げ式棒グラフ グラフの種類 グラフタイトル x軸タイトル y軸タイトル グラフの数(n_g) 各グラフのタイトル(n_g個) データの数(n_p) 凡例(n_p個) y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データ(n_p×n_g個) タイトル表示の有無 */ else if (kind == 3) { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); n_p = Integer.parseInt(token.nextToken()); x_title = new String [n_p]; for (i1 = 0; i1 < n_p; i1++) x_title[i1] = token.nextToken(); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; StackGraph gp = new StackGraph(title, g_title, x_title, y_scale, y_place, data_y, d_t); } /* 円グラフ グラフの種類 グラフタイトル データの数(n_p) 凡例(n_p個) データ(n_p個) タイトル表示の有無 */ else if (kind == 4) { title[0] = token.nextToken(); n_p = Integer.parseInt(token.nextToken()); x_title = new String [n_p]; for (i1 = 0; i1 < n_p; i1++) x_title[i1] = token.nextToken(); data_y = new double [1][n_p]; for (i1 = 0; i1 < n_p; i1++) data_y[0][i1] = Double.parseDouble(token.nextToken()); k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; PieGraph gp = new PieGraph(title[0], x_title, data_y[0], d_t); } /* 散布図 グラフの種類 グラフタイトル x軸タイトル y軸タイトル x軸の最小値 x軸の最大値 x軸の刻み幅 x軸の小数点以下桁数 y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データの数(n_p) データ(2×n_p個) タイトル表示の有無 */ else if (kind == 5) { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); x_scale[0] = Double.parseDouble(token.nextToken()); x_scale[1] = Double.parseDouble(token.nextToken()); x_scale[2] = Double.parseDouble(token.nextToken()); x_place = Integer.parseInt(token.nextToken()); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); n_p = Integer.parseInt(token.nextToken()); data_y = new double [2][n_p]; for (i1 = 0; i1 < 2; i1++) { for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; ScatterDiagram gp = new ScatterDiagram(title, x_scale, y_scale, x_place, y_place, data_y, d_t); } /* レーダーチャート グラフの種類 グラフタイトル グラフの数(n_g) 各グラフのタイトル(凡例)(n_g個) データの数(n_p) 各軸への表示項目(n_p個) 軸の最小値 軸の最大値 軸の刻み幅 軸の小数点以下桁数 データ(n_p×n_g個) タイトル表示の有無 凡例表示の有無 */ else if (kind == 6) { title[0] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); n_p = Integer.parseInt(token.nextToken()); x_title = new String [n_p]; for (i1 = 0; i1 < n_p; i1++) x_title[i1] = token.nextToken(); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_g = false; RadarChart gp = new RadarChart(title[0], g_title, x_title, y_scale, y_place, data_y, d_t, d_g); } /* ボード線図 グラフの種類 グラフタイトル x軸タイトル y軸タイトル グラフの数(n_g) 各グラフのタイトル(凡例)(n_g個) x軸の最小値 x軸の最大値 x軸の刻み幅 x軸の小数点以下桁数 y軸の最小値 y軸の最大値 y軸の刻み幅 y軸の小数点以下桁数 データの数(n_p) データ(2×n_p×n_g個,(x,y),(x,y),・・・の順) タイトル表示の有無 凡例表示の有無 */ else { title[0] = token.nextToken(); title[1] = token.nextToken(); title[2] = token.nextToken(); n_g = Integer.parseInt(token.nextToken()); g_title = new String [n_g]; for (i1 = 0; i1 < n_g; i1++) g_title[i1] = token.nextToken(); x_scale[0] = Double.parseDouble(token.nextToken()); x_scale[1] = Double.parseDouble(token.nextToken()); x_scale[2] = Double.parseDouble(token.nextToken()); x_place = Integer.parseInt(token.nextToken()); y_scale[0] = Double.parseDouble(token.nextToken()); y_scale[1] = Double.parseDouble(token.nextToken()); y_scale[2] = Double.parseDouble(token.nextToken()); y_place = Integer.parseInt(token.nextToken()); n_p = Integer.parseInt(token.nextToken()); data_x = new double [n_g][n_p]; data_y = new double [n_g][n_p]; for (i1 = 0; i1 < n_g; i1++) { for (i2 = 0; i2 < n_p; i2++) data_x[i1][i2] = Double.parseDouble(token.nextToken()); for (i2 = 0; i2 < n_p; i2++) data_y[i1][i2] = Double.parseDouble(token.nextToken()); } k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_t = false; k1 = Integer.parseInt(token.nextToken()); if (k1 == 0) d_g = false; Bode gp = new Bode(title, g_title, x_scale, x_place, y_scale, y_place, data_x, data_y, d_t, d_g); } } }