С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/37: Рейтинг темы: голосов - 37, средняя оценка - 4.57
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283

Линейный график на PHP+GD

21.09.2009, 07:19. Показов 7220. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Убил всю ночь.... и получилась фигня

PHP
1
2
3
4
5
6
7
8
9
10
11
12
while ($line = mysql_fetch_array($result, MYSQL_BOTH))
 {
  $zoom = $line[0]*6;
  $starYusd =$zoom;
  $startXusd = $startXusd+$step;
  $endXusd = $endXusd+$step;
   $endYusd  = $starYusd;
  imageline($im,$startXusd,$startYusd,$endXusd, $endYusd,$orange); // Гориз
  imageline($im,$startXusd+$Wstolb,$startYusd,$endXusd+$Wstolb, $endYusd,$orange);  //Верти
  imageline($im,$startXusd+$Wstolb,$starYusd,$startXusd, $starYusd,$orange);          //Гориз
 
 }
Это собственно то к чему пришел.... Результат не очень гуд

Как начертить график курсов? Курсы есть, получаю из БД, без проблем а вот нарисовать график че та не получается...

В примере выше попытался начертить не линейный график а как бы его назвать "Столбцы" но он получился у меня верх ногами....
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2009, 07:19
Ответы с готовыми решениями:

Линейный график
Такой вопрос, есть готовый png график, который нужно написать в веб. Вопрос в том что лучше использовать? И как его реализовывать с...

линейный график
Требуется создать программу, которая бы строила линейный график по уравнению y=((2x+(3-z))/a)^1/2. Предусмореть поля для ввода...

Линейный график (сглаженный) по заданным точкам
Здравствуйте! Как у начинающего самоучки - непонятных вопросов много. Один из них, это "Как построить линейный график по заданным...

27
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
21.09.2009, 10:21  [ТС]
если не просто так, то сколько ?
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
27.09.2009, 01:49  [ТС]
мне нужен самый простой линейный график без выпендрешев
Чтоб функция чертила график согласно тому массиву что я ей дал.

Вопрос.

Сколько это будет стоить?

Добавлено через 2 минуты
содержания массива примерно следующее.
$kurs = array(1=>'31.20', '31.30', '31.01', '29.40', '32.10' и т.д)
0
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
27.09.2009, 11:22
Цитата Сообщение от delphi Посмотреть сообщение
мне нужен самый простой линейный график без выпендрешев
Чтоб функция чертила график согласно тому массиву что я ей дал.
Что-то пока не понятно, что именно надо.
1) Массив - то он из базы берется, то руками задается.. Он будет фиксированного размера ? В смысле, сколько столбцов будет?
2) Масштаб по горизонтали и вертикали руками задаваться будет, или его надо высчитывать по данным?
3) Ну и всякие мелочи - нужны ли поля, линии там всякие, цифры?

Добавлено через 8 минут
Цитата Сообщение от delphi Посмотреть сообщение
он получился у меня верх ногами....
Дело в том, что вертикальная ось при рисовании направлена от верхнего края вниз, соответственно, вертикальные координаты надо пересчитывать как $Ypos0 - $Y, если ноль считать по нижней линии рисунка, то $Ypos0 принимать равным высоте рисунка.
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
27.09.2009, 18:02  [ТС]
Цитата Сообщение от Alexiski Посмотреть сообщение
1) Массив - то он из базы берется, то руками задается.. Он будет фиксированного размера ? В смысле, сколько столбцов будет?
Да из БД, столбцы динамические. Но я могу каждый столбец перегонять в отдельный массив.
и рисовать примерно так graph($array1,$array2,color_line,$img) где $img то где рисовать, $array1 это массив данных (курс доллара) а $array2 это подпись внизу графика, подпись слева будет формироваться в зависимости от $array1..... Если так можно.
т.е график должен рисовать именно на том рисунке $img который я ему подсуну.

2) Масштаб по горизонтали и вертикали руками задаваться будет, или его надо высчитывать по данным?
Собственно ответ выше.

Цитата Сообщение от Alexiski Посмотреть сообщение
3) Ну и всякие мелочи - нужны ли поля, линии там всякие, цифры?
Собственно ответ выше.



Я вижу вы соображаете в этом.

Мне нужен график с минимум кода и максимум комментариями.
За рабочий исходник поговорим о цене.
0
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
28.09.2009, 05:35
Как-то так.. Если все-таки надо как-то подгонять столбцы к размеру изображения, пишите - как именно.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
function my_draw($im, $kurs, $color)
{
  $y = imagesy($im);
  foreach ($kurs as $i => $k)
  {
    imagefilledrectangle($im, $i*50-10, $y-40-($k*10), $i*50+10, $y-40, $color);
    imagestring($im, 2, $i*50-15, $y-25, sprintf("%.2f", $k), $color);
  }
}
 
header ('Content-type: image/png');
$im = imagecreatetruecolor(300, 400);
$kurs = array(1=>31.20, 31.30, 31.01, 29.40, 32.10);
$color = imagecolorallocate($im, 192, 192, 0);
my_draw($im, $kurs, $color);
imagepng($im);
imagedestroy($im);
?>
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
28.09.2009, 06:46  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$w = 620;    // Ширина. X
$h = 500;    //Высота.  Y
 
 
 while ($line = mysql_fetch_array($result, MYSQL_BOTH))
 {
  $kurs[] = $line[0];
 
 }
 
function my_draw($im, $kurs, $color)
{
  $y = imagesy($im);
  foreach ($kurs as $i => $k)
  {
    imagefilledrectangle($im, $i*50-10, $y-40-($k*10), $i*50+10, $y-40, $color);
    imagestring($im, 2, $i*50-15, $y-25, sprintf("%.2f", $k), $color);
  }
}
 
header ('Content-type: image/png');
$im = imagecreatetruecolor($w, $h);
$color = imagecolorallocate($im, 192, 192, 0);
my_draw($im, $kurs, $color);
imagepng($im);
imagedestroy($im);
Вот, на чем остановился.
результат.
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
28.09.2009, 06:48  [ТС]
1. График уехал влева.
2. График не линейный.

Собственно все Мы же чертили простой график

Почему линейный. Мне нужно накладывать другие курсы по верх и соответственно в данном виде все будет слито

А и курсы нужны слево а не снизу.

Также я так понимаю нужно определять не ширину а высоту, так как если допустим сюда наложить курс евро, то график уедет за границу экрана.
0
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
28.09.2009, 11:26
Ага, а следом Вы наложите итальянскую лиру? Так не пойдет. Или надо сразу знать все курсы, чтобы высчитать максимальный, или таки иметь фиксированный масштаб, исходя из некоторого "потолка"

Я ведь не зря написал:
Цитата Сообщение от Alexiski Посмотреть сообщение
Если все-таки надо как-то подгонять столбцы к размеру изображения, пишите - как именно.
Этот вопрос так просто не решается.

Добавлено через 10 минут
Можно, например, сделать 2 процедуры, на первом этапе насчитать нужные цифры, на втором уже рисовать. Так подойдет?

Опять же, если сверху что-то накладывать, количество столбцов всегда будет то же самое? Или снова нужно высчитывать максимум?

И насчет курсов слева - надо что-то вроде шкалы нарисовать (с фиксированным шагом), или именно сами значения по каждому столбику?
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
28.09.2009, 12:39  [ТС]
Цитата Сообщение от Alexiski Посмотреть сообщение
Можно, например, сделать 2 процедуры, на первом этапе насчитать нужные цифры, на втором уже рисовать. Так подойдет?
Да.

Цитата Сообщение от Alexiski Посмотреть сообщение
Опять же, если сверху что-то накладывать, количество столбцов всегда будет то же самое?
Столбцы и будут одинаковы. горизонталь Дата ( сам потом нарисую) а вертикаль Шкала Курсов.
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
29.09.2009, 12:36  [ТС]
кто нить сможет дописать чтоб график линейный был?
0
Любитель давать советы
 Аватар для Alexiski
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
29.09.2009, 16:02
Я не пойму, какой именно нужен график. Такой устроит?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php 
function my_draw($im, $kurs, $kol, $no, $maxno, $color, $max)
{
/* константы */
  $leftgap = 45;
  $rightgap = 15;
  $topgap = 15;
  $bottomgap = 45;
 
  $xmax = imagesx($im);
  $ymax = imagesy($im);
 
  $xframe = $xmax - $leftgap - $rightgap;
  $yframe = $ymax - $topgap - $bottomgap;
 
  foreach ($kurs as $i => $k)
  {
    imagefilledrectangle($im, 
        $leftgap + ($i-1)*$xframe/$kol + $no*$xframe/$kol/($maxno+2),
        $ymax-$bottomgap-$k*$yframe/$max,
        $leftgap + ($i-1)*$xframe/$kol + ($no+1)*$xframe/$kol/($maxno+2),
        $ymax-$bottomgap,
        $color);
  }
}
 
function scaledraw($im, $max, $color)
{
/* константы */
  $leftgap = 10;
  $rightgap = 45;
  $topgap = 15;
  $bottomgap = 45;
 
  $ymax = imagesy($im);
  $yframe = $ymax - $topgap - $bottomgap;
 
  for ($scale = 0; $scale < $max; $scale += 5)
  {
    $y = $ymax-$bottomgap-$scale*$yframe/$max;
    imagestring($im, 2, $leftgap, $y-7 , sprintf("%.2f", $scale), $color);
    imageline($im, $rightgap-3, $y, $rightgap, $y, $color);
  }
}
 
header ('Content-type: image/png');
$im = imagecreatetruecolor(300, 400);
 
$kurs1 = array(1=>31.20, 31.30, 31.01, 29.40, 32.10);
$kurs2 = array(1=>45.20, 44.30, 40.01, 42.40, 44.10);
$kurs3 = array(1=>15.20, 20.30, 15.01, 17.40, 15.10);
 
$color1 = imagecolorallocate($im, 192, 192, 0);
$color2 = imagecolorallocate($im, 0, 0, 255);
$color3 = imagecolorallocate($im, 0, 255, 0);
 
my_draw($im, $kurs1, 5, 1, 3, $color1, 45.20);
my_draw($im, $kurs2, 5, 2, 3, $color2, 45.20);
my_draw($im, $kurs3, 5, 3, 3, $color3, 45.20);
 
scaledraw($im, 45.20, $color3);
 
imagepng($im);
imagedestroy($im);
?>
Миниатюры
Линейный график на PHP+GD  
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
29.09.2009, 16:13  [ТС]
Прикольно
Но хотелось просто линейный график, по другому гистограмма.
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
29.09.2009, 17:38
Вы посмотрите вот на этом сайте:
ссылка
Я попробывал сделать вот по этому коду:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
$years = array( 1970, 1980, 1990, 1995, 2000, 2005, 2010, 2015 );
$countries = array();
$countries[ "World" ] = array( 36.6, 30.3, 24.7, 22.4,
  20.3, 18.3, 16.5, 15.0 );
$countries[ "Africa" ] = array( 72.4, 62.4, 51.2, 45.6,
  40.2, 35.2, 30.8, 26.8 );
$countries[ "America" ] = array( 14.8, 11.6, 9.0, 7.9,
  6.9, 6.0, 5.3, 4.6 );
$countries[ "Asia" ] = array( 48.5, 38.7, 30.2, 27.2,
  24.4, 21.8, 19.6, 17.7 );
$countries[ "Europe" ] = array( 6.4, 4.3, 2.8, 2.2,
  1.8, 1.4, 1.1, 0.8 );
$countries[ "Oceania" ] = array( 11.1, 8.7, 7.1, 6.6,
  6.1, 5.6, 5.3, 5.0 );
?>
<html>
<head>
<title>Bar Graph Example</title>
<script>
var years = [ <?php echo( join( ",", $years ) ); ?> ];
 
var rates = [];
<?php
foreach( $countries as $name => $values ) {
?>
rates[ '<?php echo($name) ?>' ] = [
  <?php echo( join( ",", $values ) ); ?> ];
<?php } ?>
 
function plot( region )
{
  var html = "";
  html += "<table width='100%' cellspacing='0' cellpadding='1'>";
  for( var year in years )
  {
    var val = Math.round( rates[region][year] );
    html += "<tr>";
    html += "<td width='8%'>"+years[year]+"</td>";
    html += "<td width='1%' class='bar-start'></td>";
    html += "<td width='92%'>";
    html += "<table width='100%' cellspacing='0' cellpadding='0'><tr>";
    html += "<td width='"+val+"%' class='bar-on'>&nbsp;</td>";
    html += "<td width='"+(100-val)+"%' class='bar-off'>&nbsp;</td>";
    html += "</tr></table></td>";
    html += "<td width='1%' class='bar-start'></td>";
    html += "</tr>";
  }
  html += "</table>";
  document.getElementById( "graph" ).innerHTML = html;
}
</script>
<style>
body { font-family: arial, verdana, sans serif; }
.bar-on { background: blue; }
.bar-off { background: white; }
.bar-start { width:1px; background: black; }
#graph { width: 600px; }
</style>
</head>
<body onload="plot('World')">
Region: <select onchange="plot(this.options[this.selectedIndex].value)">
<?php
foreach( $countries as $name => $values ) {
?>
<option value="<?php echo($name) ?>"><?php echo($name) ?></option>
<?php } ?>
</select><br/><br/>
Rates of illiteracy (larger is worse):<br/><br/>
<div id="graph">
</div>
</body>
</html>
Всё работает! Вам только надо переделать код под себя.
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
29.09.2009, 17:40  [ТС]
это все java, а мне нужно Gd
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
29.09.2009, 17:53
А Вы вот тут не смотрели?? Ссылка
Вот что получается:
http://www.softtime.ru/files/s_20050312125512.gif
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
29.09.2009, 17:55  [ТС]
Цитата Сообщение от dimjan4 Посмотреть сообщение
А Вы вот тут не смотрели??
Ты знаешь что такое линейный график?
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
29.09.2009, 18:01
Да, Вы имеете ввиду такой:
http://images.freshmeat.net/ed... raph-1.jpg??
0
21 / 21 / 2
Регистрация: 29.06.2009
Сообщений: 283
29.09.2009, 18:02  [ТС]
верно
0
 Аватар для Dimedrol
2378 / 941 / 129
Регистрация: 25.04.2009
Сообщений: 2,635
Записей в блоге: 4
29.09.2009, 18:55
Смотрите что я нашел:
Ссылка
Это библиотека для создания разного вида графиков. (в том числе и линейный).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2009, 18:55
Помогаю со студенческими работами здесь

Постоянно обновляемый линейный график Chart
Добрый день! Подскажите есть ли возможность в Chart сделать график постоянно обновляемым без маштабирования? То есть к примеру как...

Линейный Градиент на PHP
Для одного проекта требуется создать скрипт на PHP для создания изображения с определенной шириной и высотой с переливанием цвета.

Нелинейный график в линейный - как это сделать информативнее и что делать с коэффициентами?
Вопрос такой - правильно ли мыслю и как называется то, что я пишу. (конечно в общих чертах знаю, но неожиданно понял, что не понимаю...

PHP+MySQL= График
Как построить график используя данные из базы MySQL? Самый простой и понятный способ

Создать график на php по таблице
Здравстуйте, помогите пожалуйста создать график на php, вот по этой ниже написанной таблицы ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru