답변 2개 / 댓글 1개
채택된 답변
+20 포인트
2024-02-29 (목) 04:07:19
가능합니다.
답변에 대한 댓글 1개
2024-02-28 (수) 14:14:29
예를 들어 다음과 같이 해 볼 수 있을것 같습니다.
참고하셔서 원하시는 형식으로 구현해 보시는건 어떨까 합니다.
Copy
<?php
// 데이터
$categories = ['A', 'B', 'C', 'D', 'E'];
$values = [20, 30, 25, 35, 40];
// SVG 크기 설정
$svg_width = 400;
$svg_height = 400;
$cx = $svg_width / 2; // 타원의 중심 x좌표
$cy = $svg_height / 2; // 타원의 중심 y좌표
$radius_x = 100; // 타원의 x축 반지름
$radius_y = 60; // 타원의 y축 반지름
// 총 값의 합 계산
$total = array_sum($values);
// 각 부분의 시작 각도 초기화
$start_angle = 0;
// SVG 코드 생성
echo '<svg width="' . $svg_width . '" height="' . $svg_height . '" xmlns="http://www.w3.org/2000/svg">';
// 각 부분에 대한 타원형 섹션 생성
foreach ($values as $key => $value) {
// 각도 계산
$angle = 360 * ($value / $total);
// 타원형 섹션 생성
echo '<path fill="' . getColor($key) . '" d="';
echo 'M' . $cx . ',' . $cy; // 시작점
echo ' L' . ($cx + $radius_x * cos(deg2rad($start_angle))) . ',' . ($cy + $radius_y * sin(deg2rad($start_angle))); // 첫 번째 점
echo ' A' . $radius_x . ',' . $radius_y . ' 0 ' . ($angle > 180 ? '1' : '0') . ',1 ' . ($cx + $radius_x * cos(deg2rad($start_angle + $angle))) . ',' . ($cy + $radius_y * sin(deg2rad($start_angle + $angle))); // 타원의 일부
echo ' Z"'; // 닫힘
echo '/>';
// 다음 섹션의 시작 각도 업데이트
$start_angle += $angle;
}
echo '</svg>';
// 카테고리별 색상 반환 함수
function getColor($index) {
$colors = ['#ff5733', '#ffd700', '#c0c0c0', '#00ff00', '#0000ff']; // 임의의 색상
return isset($colors[$index]) ? $colors[$index] : '#000000'; // 색상이 없을 경우 기본값으로 검은색 반환
}
?>
답변을 작성하려면 로그인이 필요합니다.
