-
-
- /**
- * php GD ライブラリは折れ線グラフ、棒グラフ、円グラフを生成します
- * by bbs.it-home.org
- */
- $img_gao=170;
- $img_kuan=0;
- $jiange=30;//点間の横座標 間隔、幅生成される画像は受信データの量に応じて自動的に変更されます
- $zuo=20;//左側は空白のままにしておきます
- $you=20;//右側は空白のままにしておきます
- $shang=20;//一番上の空のままにしておきます
- $xia=20;//空白のままにしておきます
- $zuidashujuzhi=1;
- $p_x = array();//点の横座標
- $p_y = array();//点の縦座標
- $y_name= split( ",",$_GET["x_name"]);
- if ($_GET["a"]=="") die("エラーID:0");
- $shuju=split(",", $_GET ["a"]);
- //縦軸の最大値を取得
- for($i=0;$i if(!is_numeric($shuju[ $i])) die("error id:1");
- if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
- }
- //画像の幅を取得
- $ img_kuan=$zuo+$you +count($shuju)*$jiange;
- //次に画像リソースを作成します
- $image = imagecreate($img_kuan,$img_gao);
- //背景が灰色
- $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE) ;
- //座標軸は黒で表示されます
- $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
- //ポリラインは青で表示されます
- $xian_yanse = imagecolorallocate($image , 0x00, 0x00, 0xFF);
- //座標を描画
- //水平軸
- imageline ($image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse) ;
- //縦軸
- imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);
- //各点の座標を取得
- for($i=0; $i array_push ($p_x, $zuo+$i*$jiange);
- array_push ($p_y, $shang+round(($img_gao-$shang-$xia)* (1-$shuju[$i] /$zuidashujuzhi)));
- }
- //縦軸スケール
- imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo/ 4, $shang,$zuidashujuzhi, $zuobiao_yanse);
- imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+ 6, $shang+($img_gao-$shang-$xia)*1/4, $zuobiao_yanse);
- 画像文字列 ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*1 /4,$zuidashujuzhi*3/4 , $zuobiao_yanse);
- imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao -$shang-$xia)*2 /4, $zuobiao_yanse);
- 画像文字列 ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,$zuidashujuzhi*2 /4, $zuobiao_yanse);
- imageline ($image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia) *3/4, $zuobiao_yanse);
- imagestring ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,$zuidashujuzhi*1/4, $zuobiao_yanse);
- //横軸スケール
- for( $i=0;$i imageline ( $image, $zuo+$i*$jiange, $img_gao-$xia, $zuo+$ i*$jiange, $img_gao-$ xia-6, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo+$i*$jiange-$jiange/4, $shang+($img_gao-$shang-$xia) +2,$y_name[$i] , $zuobiao_yanse);
- }
//ポリライン
- $shuju_yanse_int=0;
- for($i=0;$i if( $i+1<>count($shuju)){
- イメージライン ( $image, $p_x[$i], $p_y[$i], $p_x[$i+1] ], $p_y[$i+1 ], $xian_yanse);
- imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i]-1, $p_x[$i]+1, $p_y [$i]+1, $xian_yanse );
- }
- }
- //最後のループは最後のポイントエフェクトを描画しませんでした。ここで
- imagefilledrectangle($image, $p_x[count($shuju)-1) を追加する必要があります]-1, $p_y[count($shuju)-1]-1, $p_x[count($shuju)-1]+1, $p_y[count($shuju)-1]+1, $xian_yanse);
//データ値をマーク
- for($i=0;$i imagestring ( $image, 3, $p_x[$i] +4, $p_y[$i]- 12,$shuju[$i], $zuobiao_yanse);
- }
- //ファイルヘッダーを設定
- header('Content-type: image/png');
- //出力image
- imagepng($image);
- / /リソースを解放
- imagedestroy($image);
- ?>
コードをコピー
2番目、使い方
画像を表示する必要がある場所に次のコードを挿入します。
手順:
a の値は自分で計算します。
aのテキスト形式は、getメソッドで渡される複数のデータを「,」で連結した文字列です。
中国語をグラフィックスに書き込むには、より多くの PHP 環境構成が必要となるため、HTML ソリューションを次に示します。
データ数に基づいて横軸の座標スケール名を配置するテーブルを動的に生成するだけで済みます。
例:
-
- for($ i=0;$i<12;$i++) {
- echo "
".$i."月 | ";
- }
- ?>
- tr>
コードをコピー
|