
Это по результатам посещаемости за воскресенье и понедельник. Собственные посещения (коих большинство) я вырезал для увеличения репрезентативности выборки. Смотрите, как всех рвёт фаерфокс! А вот Опера, походу, кэширует мой чёрный квадратик, и поэтому засчитывается в таком небольшом количестве. Да и хер с ней, говнобраузер.
Так вот, функция. Хочу ею с вами поделиться, берите, может, пригодится кому. GPL.
/* Рисует круговую диаграмму радиусом 200 пикселов и подписи к ней справа @param array $_data данные для диаграммы в формате "имя" => "значение" @return resource image @copyright Copyright (c) 2009, Axshavan @license http://www.gnu.org/licenses/gpl.html GNU GPL */ function draw_diagramm($_data) { $slice = 10; // количество нормально отображаемых элементов, всё, что больше, попадает в "Other" $result = imagecreatetruecolor(800, 400); imagefill($result, 200, 200, imagecolorallocate($result, 255, 255, 255)); imageellipse($result, 200, 200, 399, 399, 0); $summ = 0; $count = 0; $other = 0; foreach($_data as $k => $v) { if($count > $slice) { $other += $v; } $summ += $v; $count++; } $other_sliced = $other + $_data['Other']; $_data = array_slice($_data, 0, $slice); if(!$_data['Other'] && $other_sliced) { $_data['Other'] = $other_sliced; } elseif($other) { $_data['Other'] += $other; } imageline($result, round(200 * sin(0) + 200), round(200 * cos(0) + 200), 200, 200, 0); $radsumm = 0; $heightsumm = 0; foreach($_data as $k => $v) { $rad = 6.28 * ($v / $summ); $radsumm += $rad; $linex = 200 * sin($radsumm) + 200; $liney = 200 * cos($radsumm) + 200; imageline($result, 200, 200, round($linex), round($liney), 0); $fillx = 190 * sin($radsumm - $rad/2) + 200; $filly = 190 * cos($radsumm - $rad/2) + 200; $color = imagecolorallocate($result, rand(0, 255), rand(0, 255), rand(0, 255)); imagefill($result, $fillx, $filly, $color); imagerectangle($result, 410, $heightsumm, 430, $heightsumm + 20, 0); imagefill($result, 412, $heightsumm + 2, $color); imagestring($result, 4, 435, $heightsumm, $k.' ('.round(100 * ($v/$summ), 2).'%)', 0); $heightsumm += 30; } return $result; }Для работы требует библиотеку GD.