ホームページ > バックエンド開発 > PHPチュートリアル > PHP図面は専門家に修正してもらってください。 。

PHP図面は専門家に修正してもらってください。 。

WBOY
リリース: 2016-06-23 14:23:35
オリジナル
1078 人が閲覧しました

<?$kuan=30;//色柱宽$jiange=20;//色柱间间隔$zuo=20;//左侧留空$you=20;//右侧留空$shang=20;//上留空$xia=10;//下留空$zuidashujuzhi=1;//初始化纵轴最大数据值if ($_GET["a"]=="") die("error id:0");$shuju=split(",",$_GET["a"]);//得到最大值for($i=0;$i<count($shuju);$i++){if(!is_numeric($shuju[$i])) die("error id:1");if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];}//计算图像宽度 $img_kuan=$zuo+$you+$jiange+count($shuju)*($kuan+$jiange);//图像高 $img_gao=170;//存储色柱高度的数组$zhugaodu = array();$image = imagecreate($img_kuan,$img_gao);$white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);//色柱颜色$shuju_yanse =array(imagecolorallocate($image, 0x97, 0xbd, 0x00),imagecolorallocate($image, 0x00, 0x99, 0x00),imagecolorallocate($image, 0xcc, 0x33, 0x00),imagecolorallocate($image, 0xff, 0xcc, 0x00),imagecolorallocate($image, 0x33, 0x66, 0xcc),imagecolorallocate($image, 0x33, 0xcc, 0x33),imagecolorallocate($image, 0xff, 0x99, 0x33),imagecolorallocate($image, 0xcc, 0xcc, 0x99),imagecolorallocate($image, 0x99, 0xcc, 0x66),imagecolorallocate($image, 0x66, 0xff, 0x99));//坐标轴颜色$zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);//横轴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);//纵轴刻度,纵轴上共标注4个点,所以这里分别计算即可imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang,round($zuidashujuzhi), $zuobiao_yanse);imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, round($shang+($img_gao-$shang-$xia)*1/4), $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,round($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);imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,round($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, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,round($zuidashujuzhi*1/4), $zuobiao_yanse);//得到每个柱的高度for($i=0;$i<count($shuju);$i++){array_push ($zhugaodu, round(($img_gao-$shang-$xia)*$shuju[$i]/$zuidashujuzhi));}//画数据柱$shuju_yanse_int=0;for($i=0;$i<count($shuju);$i++){imagefilledrectangle( $image,$zuo+$jiange+$i*($kuan+$jiange),$shang+($img_gao-$shang-$xia)-$zhugaodu[$i],$zuo+$jiange+$i*($kuan+$jiange)+$kuan,($img_gao-$xia)-1 ,$shuju_yanse[$shuju_yanse_int]);//因为只定义了10种颜色,所以这里做一个循环  if($shuju_yanse_int==9){$shuju_yanse_int=0;}else{$shuju_yanse_int++;}}//标注数据柱上方数据值for($i=0;$i<count($shuju);$i++){imagestring ( $image, 1, $zuo+$jiange+$i*($kuan+$jiange)+2,$shang+($img_gao-$shang-$xia)-$zhugaodu[$i]-10,$shuju[$i], $zuobiao_yanse);}header('Content-type: image/png');imagepng($image);imagedestroy($image);?>
ログイン後にコピー
ログイン後にコピー


このようにして、

img.php?a=5.4,2,30.2,4,0,6,7.7,3.8,2,3,4 を生成できます
上の図を取得するには、次のパラメータを使用します。 。
今、取得したいのですが、例えば5.4では3つの属性に分けて各列の名前を表示していたのですが、どうすればコードを改善できるでしょうか。


また、鋼管、アルミ管、銅管、金管などの種類は数に制限がありません。 。 。 。 。いくつかあります。
ただし、属性は 3 つだけです。 。 。 。それぞれは整数です。 。 。

コードを修正するか、簡単なコードを教えてください。 。ありがとう。


ディスカッションに返信(解決策)

<?$kuan=30;//色柱宽$jiange=20;//色柱间间隔$zuo=20;//左侧留空$you=20;//右侧留空$shang=20;//上留空$xia=10;//下留空$zuidashujuzhi=1;//初始化纵轴最大数据值if ($_GET["a"]=="") die("error id:0");$shuju=split(",",$_GET["a"]);//得到最大值for($i=0;$i<count($shuju);$i++){if(!is_numeric($shuju[$i])) die("error id:1");if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];}//计算图像宽度 $img_kuan=$zuo+$you+$jiange+count($shuju)*($kuan+$jiange);//图像高 $img_gao=170;//存储色柱高度的数组$zhugaodu = array();$image = imagecreate($img_kuan,$img_gao);$white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);//色柱颜色$shuju_yanse =array(imagecolorallocate($image, 0x97, 0xbd, 0x00),imagecolorallocate($image, 0x00, 0x99, 0x00),imagecolorallocate($image, 0xcc, 0x33, 0x00),imagecolorallocate($image, 0xff, 0xcc, 0x00),imagecolorallocate($image, 0x33, 0x66, 0xcc),imagecolorallocate($image, 0x33, 0xcc, 0x33),imagecolorallocate($image, 0xff, 0x99, 0x33),imagecolorallocate($image, 0xcc, 0xcc, 0x99),imagecolorallocate($image, 0x99, 0xcc, 0x66),imagecolorallocate($image, 0x66, 0xff, 0x99));//坐标轴颜色$zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);//横轴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);//纵轴刻度,纵轴上共标注4个点,所以这里分别计算即可imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang,round($zuidashujuzhi), $zuobiao_yanse);imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, round($shang+($img_gao-$shang-$xia)*1/4), $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,round($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);imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,round($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, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,round($zuidashujuzhi*1/4), $zuobiao_yanse);//得到每个柱的高度for($i=0;$i<count($shuju);$i++){array_push ($zhugaodu, round(($img_gao-$shang-$xia)*$shuju[$i]/$zuidashujuzhi));}//画数据柱$shuju_yanse_int=0;for($i=0;$i<count($shuju);$i++){imagefilledrectangle( $image,$zuo+$jiange+$i*($kuan+$jiange),$shang+($img_gao-$shang-$xia)-$zhugaodu[$i],$zuo+$jiange+$i*($kuan+$jiange)+$kuan,($img_gao-$xia)-1 ,$shuju_yanse[$shuju_yanse_int]);//因为只定义了10种颜色,所以这里做一个循环  if($shuju_yanse_int==9){$shuju_yanse_int=0;}else{$shuju_yanse_int++;}}//标注数据柱上方数据值for($i=0;$i<count($shuju);$i++){imagestring ( $image, 1, $zuo+$jiange+$i*($kuan+$jiange)+2,$shang+($img_gao-$shang-$xia)-$zhugaodu[$i]-10,$shuju[$i], $zuobiao_yanse);}header('Content-type: image/png');imagepng($image);imagedestroy($image);?>
ログイン後にコピー
ログイン後にコピー


このようにして、

img.php?a=5.4,2,30.2,4,0,6,7.7,3.8,2,3,4
を生成できます次のパラメータを使用すると、上記の画像を取得できます。 。
今、それを取得したいのですが、例えば5.4では3つの属性に分けて各列の名前を表示しました。コードを改善するにはどうすればよいですか?


また、鋼管、アルミ管、銅管、金管などの種類は数に制限がありません。 。 。 。 。いくつかあります。
ただし、属性は 3 つだけです。 。 。 。それぞれは整数です。 。 。

コードを修正するか、簡単なコードを教えてください。 。ありがとう。


マスターたちはどこへ行ったの? 。 。

漢字を描くのは簡単です、imagettftext で簡単にできます
でもデータを整理することはできません

ここで、例えば 5.4 から取得したいのですが、それを 3 つの属性に分けて表示しました。コードを改善する方法を教えてください。
鋼管、アルミ管、銅管、金管などの種類は数に制限がありません。 。 。 。 。いくつかあります。
ただし、属性は 3 つだけです。 。 。 。それぞれは整数です。 。 。 垂直座標を描画することもできますし、水平座標を適宜変更して描画することもできます。データ列を描画するには、2 つのネストされたループを使用します。外側のループは n 回ループします。ここで、n はチューブ タイプの数であり、内側のループは間隔なしで棒グラフを描画します。次に、画像の高さの座標を計算し、数字の文字を書き込みます。

グラフィック jquery プラグインがたくさんあります。描画するにはどの php を使用すればよいですか?

php にもグラフィック パッケージがあります

php にもグラフィック パッケージがあります

初心者なのでアドバイスをお願いします。 。 。


http://www.baidu.com/s?wd=pChart


http://www.baidu.com/s?wd=pChart

これを見て使い方を勉強中です。 。
誰か使い方を教えてもらえませんか?

API を見て、その例を見つけてコピーし、パラメーターを変更します。
JS チャート ライブラリは非常に使いやすいです: Highcharts

が最適です。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート