- - PR -
Graphics2Dクラスを利用して、グラフ作成をしているのですが、
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-09-10 15:02
いつも、お世話になっております。
体重測定をした結果をグラフにする という作業をしています。 Graphics2Dクラスのオブジェクトで データベースから取得した値を px単位で表示をしているのですが、 数値と数値間が少ないと、 刻みが狭すぎて、見づらいグラフになってしまいます。 取得した値に幅を取ろうと思って、 値をプラスしても値の幅が変わらないので どうしたらよいのか教えて頂けたら幸いです。 どうか宜しくお願い致します。 public BufferedImage getGraphWeekWeight(int pp, int cal_y, int cal_m, int cal_d, float[][] vv, int maxWeight, int aimWeight, int currentWeight, int w, int h) throws Exception { SevenDaysFactory sdf = new SevenDaysFactory(); List dt = sdf.getSevenDayList(pp, cal_y, cal_m, cal_d); String week[] = new String[]{"(日)","(月)","(火)","(水)","(木)","(金)","(土)"}; int px=0; int py=0; int xx = 0; //BufferedImageオブジェクトを作成する(8ビットRGB) BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); //Graphicsオブジェクトを作成する Graphics2D g = img.createGraphics(); //背景を塗りつぶす g.setColor(Color.white); g.fillRect(0, 0, w, h); //文字のフォントを設定します Font f1 = new Font("Monospaced", Font.PLAIN,12); Font f1b = new Font("SansSerif", Font.PLAIN,13); g.setFont(f1); //矩形の輪郭を描きます g.setColor(new Color(204,204,204)); // グレー g.drawRect(px+29,py,588,175); //縦の直線を引きます for (int i=1; i<7; i++) { g.drawLine(px+29+(i*84),py,px+29+(i*84),py+175); } //横の直線を引きます g.drawLine(px+29,py+25,px+617,py+25); //日付用 g.drawLine(px+29,py+155,px+617,py+155); //データ用 //目標体重の入力での現在の体重ライン決め int currentLine = 185 - currentWeight; g.drawLine(px+29,py+currentLine,px+617,py+currentLine); //現在の体重ライン //点線を引くために基本情報を設定します Stroke stroke = new BasicStroke(1, // 太さ10 BasicStroke.CAP_BUTT, // 端は残す BasicStroke.JOIN_MITER, // 継ぎ目は斜め 2.0f, // 継ぎ目の限界 new float[] {2.0f, 2.0f}, // 10書いて5書かないダッシュ 0.0f); // ダッシュの開始フェーズ //Graphicsオブジェクトに点線の情報をセットします g.setStroke(stroke); //横の点線を引きます //g.drawLine(px+29,py+35,px+617,py+35); //体重データの10kg増し //g.drawLine(px+29,py+85,px+617,py+85); //現在の体重を引きたい場所 //g.drawLine(px+29,py+135,px+617,py+135); //目標体重を引きたい場所 //一番上の線 int maxLine = 185 - maxWeight - 50; g.drawLine(px+29,py+maxLine,px+617,py+maxLine); //目標体重ライン int aimLine = 185 - aimWeight; g.setColor(new Color(255,51,51)); // 赤 //g.drawLine(px+29,py+aimLine+aimWeight,px+617,py+aimLine+aimWeight); //目標体重ライン g.drawLine(px+29,py+aimLine,px+617,py+aimLine); //目標体重ライン g.setStroke(new BasicStroke(1f)); //指定された矩形を塗りつぶします(日付) g.setColor(new Color(220,241,254)); // 水色 for (int i=0; i<7; i++) { g.fillRect(px+30+(i*84),py+1,83,24); } //フォントの情報をセットします g.setFont(f1b); //日付を書きます g.setColor(new Color(11,42,92)); // 紺色 for (int i=0; i<7; i++) { g.drawString(Integer.parseInt(dt.get(i).toString().substring(5,7)) + "/" + Integer.parseInt(dt.get(i).toString().substring(8,10)) + week[i], px+48+(i*84), py+18); } //縦軸に文字を書きます g.setColor(Color.black); g.setFont(f1); g.drawString(Integer.toString(maxWeight+50), px+12, py+maxLine); g.drawString(Integer.toString(currentWeight), px+12, py+currentLine); //現在の体重値 g.drawString(Integer.toString(aimWeight), px+12, py+aimLine); //目標体重値 g.drawString(Integer.toString(currentWeight-10), px+12, py+157); //取得したデータを書きます for (int i=0; i<7; i++) { if (vv[0][i]!=0) { g.drawString(Float.toString(vv[0][i]), px+29+(i*84)+25, py+170); } } int mx=0; int my=0; int cx=0; int cy=0; //折れ線 g.setColor(new Color(204,204,204)); // グレー for (int i=0; i<7; i++) { if (vv[0][i]!= 0) { cx = px+70+(i*84); cy = (int) (py+185-vv[0][i]); if (mx!=0) { g.drawLine(mx,my,cx,cy); } mx=cx; my=cy; } } //点 g.setColor(new Color(255,51,102)); for (int i=0; i<7; i++) { if (vv[0][i]!= 0) { g.fillRect(px+68+(i*84),(int) (py+184-vv[0][i]),3,3); } } //Graphicsオブジェクトを破棄する g.dispose(); return img; } |
1