Строим графики

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
worid
Сообщения: 16
Зарегистрирован: 26 ноя 2011, 01:15

Re: Строим графики

Сообщение worid » 07 янв 2015, 23:40

Наткнулся на не понятный глюк в "jpgraph"
если выполняю такой код

Код: Выделить всё

<?php
$datay1 = array(26.05,15,23,15);
$datay2 = array(26.05,9,42,8);
ini_set('display_errors',1);
error_reporting(E_ALL);
require_once ('cfg/config.php');
require_once ('src/jpgraph.php');
require_once ('src/jpgraph_line.php');

$graph = new Graph("800.600");

$graph->SetScale("textlin");
$graph->SetMarginColor('white');
$graph->SetFrame(true,'#B3BCCB', 1);
$graph->SetTickDensity(TICKD_DENSE);
$graph->img->SetMargin(50,20,20,60);
$graph->title->SetMargin(10);
$graph->xaxis->SetTickLabels($datay1);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetPos('min');

//$my_interval = ceil($i / 30);
//$graph->xaxis->SetTextTickInterval($my_interval);

$lineplot=new LinePlot($datay2);
$graph->Add($lineplot);
$graph->Stroke();

?>
тогда за место графика показывается сломанное изображения
если я комментирую

Код: Выделить всё

require_once ('cfg/config.php');
тогда график отрисовывается нормально
содержание файла "config.php"

Код: Выделить всё

<?php

?>
то есть он пустой, если заполнить разными переменными в виде логина на базу данных все равно график не отрисовывается, в логах пусто.
PHP 5.5.9-1ubuntu4.5 (cli) (built: Oct 29 2014 11:59:10)

GruNT
Сообщения: 281
Зарегистрирован: 27 авг 2014, 16:42

Re: Строим графики

Сообщение GruNT » 09 янв 2015, 20:27

А кодировка файла какая? Попробуйте UTF-8 без DOM. Должно помочь. ;)
P.S. Я использую jsChart.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: Строим графики

Сообщение gnork » 09 фев 2015, 17:11

Поясните пожалуйста механизм автообновления графиков из примера.

Код: Выделить всё

$('#ui-tabs-' + tab_index).everyTime(5000, function(i) {
   $('#gr_temp_room1').attr('src', 'jpdata.php?graph_name=temp_room1&'+Math.random()+'&temp_date=' + $('#gr_temp_room1').attr('date_type'));
});

$('.set_period').click(function () {
   $('#gr_' + $(this).attr("dev_type")).attr('date_type', $(this).attr("dev_period"));
   $('#gr_' + $(this).attr("dev_type")).attr('src', 'jpdata.php?graph_name='+$(this).attr("dev_type")+'&'+Math.random()+'&temp_date='+$(this).attr("dev_period"));
});

echo "<div class=\"grid_6\">";
	echo '<img id="gr_temp_room1" src="jpdata.php?graph_name=temp_room1">';
	echo "<a href=\"javascript:void(0)\" class=\"set_period\" dev_type=\"temp_room1\" dev_period=\"\">за час</a> | ";
	echo "<a href=\"javascript:void(0)\" class=\"set_period\" dev_type=\"temp_room1\" dev_period=\"day\">за сутки</a> | ";
	echo "<a href=\"javascript:void(0)\" class=\"set_period\" dev_type=\"temp_room1\" dev_period=\"month\">за месяц</a>";
echo "</div>";
График строится по умолчанию за час. Но после обновления (в примере - 5 секунд) вместо графика получаем "сломаную картинку". Если после этого нажать на "за час/за сутки/за месяц" график снова появляется за указанный период и после автообновления уже не пропадает. Если я правильно понимаю, при первом обновлении графику вот здесь

Код: Выделить всё

 $('#gr_temp_room1').attr('src', 'jpdata.php?graph_name=temp_room1&'+Math.random()+'&temp_date=' + $('#gr_temp_room1').attr('date_type'));
не передается значение temp_date. Хотя при первом построении

Код: Выделить всё

echo '<img id="gr_temp_room1" src="jpdata.php?graph_name=temp_room1">';
я этот параметр тоже не указываю, но график все-равно строится. Где я ошибаюсь?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Строим графики

Сообщение Andrey_B » 09 фев 2015, 17:32

gnork, все правильно. У элемента "#gr_temp_room1" нет атрибута date_type.
Это он потом появляется по клику, а изначально его нет, потому выходит JS-ошибка и картинка получается битой.
Ну то есть надо вот так прописать
echo '<img id="gr_temp_room1" src="jpdata.php?graph_name=temp_room1" date_type="">';
И типа должно работать.

gnork
Сообщения: 54
Зарегистрирован: 08 янв 2013, 20:39

Re: Строим графики

Сообщение gnork » 09 фев 2015, 17:37

Заработало....
А я то, дурья башка, вместо date_type="" пробовал temp_date="".

Fox
Сообщения: 153
Зарегистрирован: 05 авг 2014, 11:01

Re: Строим графики

Сообщение Fox » 14 сен 2015, 14:05

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

Ответить