|
|
|
| Есть информация типа:
мужчины - 120
женщины - 170
дети -16
Пока что я вывожу её в табличном виде. Это тоже приемлемо, но вот если бы вывести ее в виде цветной гистограммы, это было бы вообще великолепно!
Есть ли в рнр подходящий инструмент?
Как вообще решаются подобные проблемы? | |
|
|
| |
|
|
|
|
для: fiper
(28.09.2007 в 14:13)
| | РНР могуч!
А не могли бы Вы для примера создать рисунок (гистограмму) из приведенных мною параметров? Буквально три прямоугольничка заданного размера и разного цвета, стоящие рядом. Чтобы понять, как все же это делается. | |
|
|
|
|
|
|
|
для: Владимир55
(28.09.2007 в 14:24)
| | Или попроще пример.
Если я задам координаты (в точках) всех углов прямоугольника, какой функцией рнр можно его нарисовать?
И можно ли задать цвет? | |
|
|
|
|
|
|
|
для: Владимир55
(28.09.2007 в 14:41)
| | А посмотрите вот это. | |
|
|
|
|
|
|
|
для: Владимир55
(28.09.2007 в 14:24)
| | Вы можете отталкиваться от следующего скрипта
<?php
$rows = array(120, 170, 16);
// Ширина изображения
$width = 200;
// Высота изображения
$height = 200;
// Ширина одного столбца
$row_width = 30;
// Ширина интервала между столбцами
$row_interval = 5;
// Создание пустое изображение
$img = imagecreatetruecolor($width, $height);
// Заливаем изображение белым цветом
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);
for($i = 0, $y1 = $height, $x1 = 0; $i < count($rows); $i++)
{
// Формируем случайный цвет для каждого из столбца
$color = imagecolorallocate($img,
rand(0, 255), rand(0, 255), rand(0, 255));
// Нормирование высоты столбца
$y2 = $y1 - $rows[$i]*$height/200;
// Определение второй координаты столбца
$x2 = $x1 + $row_width;
// Отрисовываем столбец
imagefilledrectangle($img, $x1, $y1, $x2, $y2, $color);
// Между столбцами создаём интервал в $row_interval пикселей
$x1 = $x2 + $row_interval;
}
// Выводим изображение в браузер, в формате GIF
header ("Content-type: image/gif");
imagegif($img);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 02:27)
| | Ну тогда уж так:
<?php
function Segment($x,$y,$rad,$in,$end,$color) {
global $im,$x,$y,$black;
imagefilledarc($im, $x, $y, $rad*2, $rad*2, $in, $end, $color, IMG_ARC_PIE);
imagefilledarc($im, $x, $y, $rad*2, $rad*2, $in, $end, $black, IMG_ARC_EDGED | IMG_ARC_NOFILL);
}
function Diagram($data,$colors,$x,$y,$rad) {
global $im,$x,$y,$black;
$cnt=count($data);
sum=array_sum($data);
$in=0;
$end=floor($in+(($data[1]*100)/$sum)*360/100);
Segment($x,$y,$rad,$in,$end,$colors[1]);
for($i=2;$i<$cnt;$i++) {
$in=$end;
$end=floor($in+(($data[$i]*100)/$sum)*360/100);
Segment($x,$y,$rad,$in,$end,$colors[$i]);
}
$in=$end;
$end=360;
Segment($x,$y,$rad,$in,$end,$colors[$cnt]);
}
$men = 120; //мужчины
$wmen = 170; //женщины
$chil = 16; //дети
$size = 200; //размер изображения
$im = ImageCreate ($size, $size);
$red = ImageColorAllocate($im, 255, 0, 0);
$blue = ImageColorAllocate($im, 0, 0, 255);
$green = ImageColorAllocate($im, 0, 255, 0);
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
ImageFill($im, 0, 0, $white);
$x=$size/2-1; $y=$x;
$rad=$size/2;
$data[1]=$men; $colors[1]=$blue;
$data[2]=$wmen; $colors[2]=$red;
$data[3]=$chil; $colors[3]=$green;
//вывод круговой диаграммы
Diagram($data,$colors,$x,$y,$rad);
header ("Content-type: image/gif");
Imagegif($im);
imagedestroy($im);
?>
|
| |
|
|
|
|
|
|
|
для: sim5
(30.09.2007 в 13:54)
| | Parse error: syntax error, unexpected '=' in d:\main\get.php on line 11 | |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 14:29)
| | Ну забыл про бакс! ))
| |
|
|
|
|
|
|
|
для: sim5
(30.09.2007 в 13:54)
| | Хм... собственно помоему требовалась именно гистограмма, а не круговая диаграмма, однако для малого количества категорий она действительно удобнее. | |
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 14:36)
| | Ёлки-палки, здорово-то как!
Спасибочки! | |
|
|
|
|
|
|
|
для: Владимир55
(30.09.2007 в 21:02)
| | Здорово-то оказалось только не бумаге... А в реале ничего не показывается - чистый экран. С Денвером пишет тарабарские знаки, а с хостингом просто вообще ничего. Хоть первый вариант, хоть второй - одинаково.
Может, этот код для рнр 5 версии?
Или какая настройка нужна? | |
|
|
|
|
|
|
|
для: Владимир55
(01.10.2007 в 01:44)
| | Для работы этого скрипта (хоть первый, хоть второй) нужно чтобы была установлена библиотека php_gd2.dll. На хосте она обычно поддерживается по умолчанию, в Денвере также установлена, если конечно у вас не нечто особенное в конфигурациях Денвера.
С хоста вызывайте так, например, имя скрипта выводящего диаграмму будет diagramm.php, тогда на странице вставляйте изображение:
<img src="path/diagramm.php" /> | |
|
|
|
|
|
|
|
для: sim5
(01.10.2007 в 01:58)
| | Денвер самый обычный. На сервере результат тот же. А именно:
Сделал специальный тестовый test.htm файл, разместив в нем единственную строку:
<p>Диаграмма <img src="diagramm.php" /></p>
|
И сделал рнр файл с названием diagramm.php, разместив в нем первый, а затем вместо первого второй коды.
Оба файла в корне сайта. На файле test.htm пустой квадратик - и больше ничего при любом варианте кодов.
Что бы это значило? | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2007 в 01:21)
| | Скорее всего не обрабатываются заголовки, я так пологаю. Вот пример запроса вашего, с реального сайта:
<p>Диаграмма <img src="diagramm.php" /></p> | |
|
|
|
|
|
|
|
для: sim5
(02.10.2007 в 01:46)
| | Что-то можно сделать, чтобы коды функционировали?
Или уже считать, что "фокус не удался"? | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2007 в 01:58)
| | Это, наверное, из-за imagegif(). В последних GD ее вроде бы нет.
Попробуйте imagepng() или imagejpeg().
Ну и соответственно изменить заголовок content-type.
PS кстати, content-type можно послать "text/plain" и посмотреть ошибки, которые выведутся (обратившись прямо к diagramm.php) | |
|
|
|
|
|
|
|
для: Владимир55
(02.10.2007 в 01:58)
| | Не должно быть, чтобы при наличии GD не было поддержки GIF. У меня GD версии 2.1.9, все на месте. Но попробуйте сохранить и передать его как JPEG изображение. Также можно проверить поддержку вашей GD-библиотекой, получив массив функцией gd_info().
Можно вообще без GD-графики, подготовив три изображения с локальным цветом:
если график горизонтальный, то фиксированной заданной высоты и шириной 1рх;
если график вертикальный, то фиксированной заданной ширины и выстой 1рх.
(собственно изображения могут быть однопиксельными).
Далее узнаете сумму всего контингента посетителей, если процент нужен от общей суммы, либо берете от наибольшего числа, а остальное процент от него. Тогда, при горизонтальном графике, выводите:
<img src="path/name.ext" height="фиксированный размер по высоте в пикселях"
width="процент от большего размера в пикселях" />
|
Вот и получится график, а далее "легенда" и прочие "украшательства". | |
|
|
|
|
|
|
|
для: Владимир55
(01.10.2007 в 01:44)
| | Скрипт не модифицировали? Берёте как есть? | |
|
|
|
|
|
|
|
для: Владимир55
(01.10.2007 в 01:44)
| | Вы по ссылке ходили которую я указал?
Там ваша проблема решается вообще без GD библиотеки... присмотрелись бы | |
|
|
|
|