このような php ドーナツ チャート生成プログラムはありますか
ディスカッション (解決策) に返信します
画像を生成しますか、それとも Web ページに表示するだけの場合は表示しますか?画像を生成したい場合は、jpGraph の使用を検討してください。必要なスタイルをサポートするスタイルがあるかどうかはわかりません
自分で書くのは難しくありませんが、各リンクの計算量は比較的多くなります
PHPはサーバー上で実行するときにのみデータを提供します アイコン表示。上記の Buzhu が言及したライブラリなどの js の使用が必要です
円を描くための PHP プログラムについて話していますか?私もあなたと同じようなことをしたことがあります!参考までに…このプログラムは参考用です。
//チャートを埋めるためのパラメーター
$ChartDiameter = 140; //チャートの直径
$ChartData = array(20,80);//チャートの生成に使用されるデータは、以下から取得することで決定できます。データベースには複数ある可能性がありますが、色の配列に対応します
$msg = '56%'
//角度をラジアンに変換します
function radians($degrees){
return($degrees*(pi(); /180.0));
}
//中心(0, 0)の円上のx、y点の値を取得する
functioncircle_point($degrees,$diameter){
$x=cos(radians($degrees) )*($diameter/2 );
$y=sin(radians($degrees))*($diameter/2);
return array($x,$y);
//グラフ
$ChartWidth = $ChartDiameter + 22 ;
$ChartHeight = $ChartDiameter + 56;
//統計の総数を決定します
$ChartTotal = ''
for($index = 0;$index < count($) ChartData);$index++){
$ChartTotal + = $ChartData[$index];
$ChartCenterX = $ChartDiameter/2 + 11;
//空白のグラフィックを生成します
$image = imagecreatetruecolor($ChartWidth, $ChartHeight) ;
//色の割り当て
$colorBody=imagecolorallocate($image,255,255,255);//白
$colorBorder=imagecolorallocate($image,0,0,0); colorText=imagecolorallocate($image, 0, 0, 0);
$colorSlice[] = imagecolorallocate($image, 255,255,255);//上で書いた配列に対応する色です
$colorSlice[] = imagecolorallocate($ image, 241,120,129);//データ表示時の背景色
//$colorSlice[] = imagecolorallocate($image,0,0,0);//データ表示時の背景色
//背景を塗りつぶす
imagefill($image, 0, 0, $colorBody) ;
//各セクターを描画します
$Degrees = 0;
for($index = 0; $index < count($ChartData); $index++){
$startDegrees =round($Degrees);
$Degrees + = (($ChartData[$index]/$ChartTotal)*360);
$EndDegrees = Round($Degrees); ($colorSlice))]
//画像を描画します F
imagearc
($image,$ChartCenterX,$ChartCenterY,$ChartDiameter,$ChartDiameter,$startDegrees,$EndDegrees,
$CurrentColor);直線
list($ArcX, $ArcY) = Circle_point( $startDegrees, $ChartDiameter);
imageline($image,$ChartCenterX,$ChartCenterY,floor($ChartCenterX + $ArcX),
Floor($ChartCenterY + $) ArcY),$CurrentColor);
//直線を描画します
list( $ArcX, $ArcY) = Circle_point($EndDegrees, $ChartDiameter);
imageline($image,$ChartCenterX,$ChartCenterY,ceil($ChartCenterX +) $ArcX),
ceil($ChartCenterY + $ArcY),$CurrentColor) ;
//セクターを塗りつぶします
$tempnum = $EndDegrees - $startDegrees
$MidPoint =round(($tempnum/2)+$startDegrees; ;
list($ArcX, $ArcY) = Circle_point($MidPoint, $ChartDiameter /2);
imagefilltoborder($image,floor($ChartCenterX + $ArcX), floor($ChartCenterY + $ArcY),
$CurrentColor, $CurrentColor);
}
$red = imagecolorallocate($image,255,0 ,0);// 赤を割り当てる
$white = imagecolorallocate($image,255,255,255);// 白を割り当てる
imagefilledellipse($image,81, 98,120,120,$red);
$font = 'simhei.ttf';
imagettftext ($image, 20,0, 63, 108, $white, $font,$msg); // 画像が生成されました。ブラウザに送信する場合、重要なことは、ヘッダーをブラウザに送信し、それが GIF ファイルであることを通知することです。
header("コンテンツタイプ: image/png");
imagedestroy($image);
ダウンロードする必要がある simhei.ttf フォント ファイルがあることを付け加えておきます。私に問い合わせてください。
そして、あなたが言及した画像は、描画の半径と各セクターの開始点を制御するため、アルゴリズムについて考える必要があります。
問題は解決しました、皆さんありがとうございます。