Open Flash Chart – строим графики

Владимир | | HTML, PHP, Web разработка.

Скриншот графика - Open Flash Chart

Создание изображений – довольно сложная и трудоемкая задача. Если не использовать специальных библиотек.

Об одной из них я и хочу рассказать.

Open Flash Chart. Уже по названию становится ясно, что:

1) библиотека распространяется с открытыми исходниками и бесплатно;

2) предназначена для создания графиков;

3) использует технологию Flash.

Сразу остановлюсь на третьем пункте. Flash обладает одним недостатком. Если у посетителя не установлен Flash player, то график он не увидит.

Зато достоинств гораздо больше:

1) Интерактивность. При наведении указателя мыши на график появляется подсказка с данными выбранной точки.

2) Снижение нагрузки на сервер. Если использовать графики в виде картинок, то серверу придется создавать изображение при каждом запросе, а это довольно ресурсоемкая операция. В данном случае используется один и тот же Flash ролик, который входит в состав дистрибутива библиотеки. Серверный скрипт должен только создать текстовую строку с данными для построения графика.

3) Увеличение скорости загрузки, экономия трафика. Flash ролик грузится только один раз, занимает 63 кБ. При этом график может быть размером с экран браузера.

Но это все теория. Переходим практической части.

Из дистрибутива библиотеки нам нужны:

1) Flash ролик — open-flash-chart.swf;

2) файлы open_flash_chart_object.php и open-flash-chart.php из папки php-ofc-library.

При этом файл open_flash_chart_object.php используется для создания html кода вставки графика на страницу. А open-flash-chart.php содержит вспомогательные функции для работы с данными.

Примечание. Для создания файла с данными не обязательно использовать PHP. В библиотеку входят готовые решения для .Net, Java, Ruby, Perl. Вообще-то можно использовать любой скриптовый язык или просто записать данные в обычный текстовый файл. Но формат данных довольно сложный и без вспомогательных функций работать с ним не удобно.

Копируем эти три файла в папку с сайтом.

Создаем файл index.php со следующим содержимым.

<body>
<?php
include_once 'open_flash_chart_object.php';
$baseURL = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
open_flash_chart_object( 400, 250, $baseURL.'/chart-data.php', false, $baseURL );
?>
</body>

Тут мы подключили open_flash_chart_object.php и вызвали функцию open_flash_chart_object, которая создает html код вставки Flash ролика.

Первый и второй параметры функции – длина и ширина графика в пикселях. Кстати, ширину можно задать в процентах (100% — все окно браузера).

Третий параметр – URL скрипта, который создает строку с данными для построения графика. В данном случае эту строку будет создавать PHP скрипт chart-data.php, который мы напишем чуть позже.

Четвертый параметр указывает, нужно ли использовать SWFObject.

Пятый – URL папки, в которой находится файл Flash ролика (без слеша в конце).

Теперь переходим к скрипту chart-data.php. Как я уже говорил, он формирует строку с данными.

// создаем массив с данными
$data = array();
for( $i=0; $i<10; $i++ )
{
	$data[] = sin(pi()/5*$i);
}

// подключаем класс со вспомогательными функциями
// для построения графика
include_once( 'open-flash-chart.php' );
$g = new graph();

// Заголовок
$g->title( 'Функция синуса', '{font-size: 26px;}' );

// добавляем данные на график
$g->set_data( $data );
// строим гистограмму
$g->bar( 100, '#9933CC', 'Гистограмма', 10 );

// еще раз добавляем теже самые данные
$g->set_data( $data );
// строим второй график
$g->line_dot( 3, 5, '#CC3399', 'График', 10 );

// подписи по оси Х
$labelsX = array();
for ($i = 0; $i < 10; $i++) {
	$labelsX[] = round(pi()/5*$i, 2);
}
$g->set_x_labels($labelsX);

// максимальное и минимальное значение по оси Y
$g->set_y_max( 1.2 );
$g->set_y_min( -1.2 );
// количество меток по оси Y
$g->y_label_steps( 12 );

// отображаем данные
echo $g->render();

Как видите, вся работа выполняется методами класса graph (находится в файле open-flash-chart.php).

Исходные данные для построения графика должны находится в обычном массиве. Для этого примера я взял функцию синуса (строки 2-6).

Названия функций класса graph говорят сами за себя.

title – добавляет заголовок графика (во втором параметре указываем размер шрифта).

set_data – добавляет данные на график.

bar – строит гистограмму. Параметры:
1) прозрачность;
2) цвет;
3) надпись в легенде;
4) размер шрифта в легенде.

line_dot – строит обычный график с точками. Параметры:
1) толщина линии;
2) диаметр точек;
3) надпись в легенде;
4) размер шрифта в легенде.

set_x_labels – добавляет подписи по оси Х (подписи должны находится в массиве).

set_y_max, set_y_min – ограничения по оси Y.

y_label_steps – количество меток по оси Y (в данном случае шаг получается равным 0,2).

render – формирует строку с данными для построения графика.

График, который получается в результате выполнения скрипта, показан на скриншоте в начале статьи.

Отдельно хочу отметить документацию. Автор приводит примеры кода для всех типов графиков, а их больше десятка. Так что можно не вникая в тонкости библиотеки подобрать себе готовое решение.

Если хотите поэкспериментировать с этим примером, качайте архив с ним. В архив входит не вся библиотека, а только файлы с Flash роликом и PHP классами.

До встречи!

  • Гм. хороший офис. Я и не знал что можно там строить свои графики )

  • Гм. хороший офис. Я и не знал что можно там строить свои графики )

  • Я вот смотрю на тему и думаю,это каким же надо быть умным что бы с ходу во всем этом розобратся,я просто летаю в этом материале(((((

  • Я вот смотрю на тему и думаю,это каким же надо быть умным что бы с ходу во всем этом розобратся,я просто летаю в этом материале(((((

  • Мастер ,а зачем же смотриш если тебе это все как я понял по барабану???

  • Мастер ,а зачем же смотриш если тебе это все как я понял по барабану???

  • Тут куча ошибок автор статьи делает одно а описует другое куча не венрных инклудов ппц….

    • Странно, пример в архиве нормально у меня работал, а в тексте — скопированные фрагменты кода из этого примера.
      Напишите, пожалуйста, какие именно ошибки у вас возникли.

  • Тут куча ошибок автор статьи делает одно а описует другое куча не венрных инклудов ппц….

    • Странно, пример в архиве нормально у меня работал, а в тексте — скопированные фрагменты кода из этого примера.
      Напишите, пожалуйста, какие именно ошибки у вас возникли.

  • а по мне так классный скрипт, и автор нормально так, понятно, всё разложил по полочкам! автору 5 баллов.

  • а по мне так классный скрипт, и автор нормально так, понятно, всё разложил по полочкам! автору 5 баллов.

  • tigerrr

    Благодарю, при первом запуске понравилось

  • tigerrr

    Благодарю, при первом запуске понравилось

  • Дмитрий

    Я непонимаю зачем вылаживать нерабочие кривые примеры!

    • У меня пример нормально работает. Напишите, пожалуйста, какие у вас были ошибки.

  • Дмитрий

    Я непонимаю зачем вылаживать нерабочие кривые примеры!

    • У меня пример нормально работает. Напишите, пожалуйста, какие у вас были ошибки.

  • Виктор

    Статья полезная, примеры работают. Есть только проблема: как можно сделать так, что бы графики обновлялисьпри обновлении страницы?

    • По-моему, делать ничего не нужно 😉
      У меня график обновляется если между перезагрузками страницы изменяется chart-data.php, т.е. данные по которым строится график (для эксперимента я заменил функцию sin на cos, строка 5 последнего листинга).
      А если данные не меняются, то зачем обновлять график?

  • Виктор

    Статья полезная, примеры работают. Есть только проблема: как можно сделать так, что бы графики обновлялисьпри обновлении страницы?

    • По-моему, делать ничего не нужно 😉
      У меня график обновляется если между перезагрузками страницы изменяется chart-data.php, т.е. данные по которым строится график (для эксперимента я заменил функцию sin на cos, строка 5 последнего листинга).
      А если данные не меняются, то зачем обновлять график?

  • Виктор

    ну вот например эксплорер обнолвляет график при переоткрыитии страницы, а В опере график висит месячной давности…
    Я хочу реализовать например, что бы при выборе определенных параметров, строился график, вот как это можно реализовать? В chart-data.php данные заносятся из базы данных и данные меняются.

  • Виктор

    ну вот например эксплорер обнолвляет график при переоткрыитии страницы, а В опере график висит месячной давности…
    Я хочу реализовать например, что бы при выборе определенных параметров, строился график, вот как это можно реализовать? В chart-data.php данные заносятся из базы данных и данные меняются.

  • Виктор

    Спасибо за статью… разбираться уже буду после праздника… Похоже что придется исполизовать джаву

  • Виктор

    Спасибо за статью… разбираться уже буду после праздника… Похоже что придется исполизовать джаву

  • Иван

    Поскажите пожалуйста как округлять значения по оси Y до целых, до десятичных (нигде не могу найти как это сделать)?
    статья для новичков очень доходчива… спасибо)

    • С помощью функции round. Проходите в цикле все Y значения и для каждого вызываете эту функцию.

      Цитата из PHP manual

      float round ( float $val [, int $precision ] )

      Возвращает округлённое значение val с указанной точностью precision (количество цифр после запятой). Последняя может быть отрицательной или нулём (по умолчанию).

      Пример #1 Примеры функции round()

      echo round(3.4); // 3
      echo round(3.5); // 4
      echo round(3.6); // 4
      echo round(3.6, 0); // 4
      echo round(1.95583, 2); // 1.96
      echo round(1241757, -3); // 1242000
      echo round(5.045, 2); // 5.05
      echo round(5.055, 2); // 5.06

  • Иван

    Поскажите пожалуйста как округлять значения по оси Y до целых, до десятичных (нигде не могу найти как это сделать)?
    статья для новичков очень доходчива… спасибо)

    • С помощью функции round. Проходите в цикле все Y значения и для каждого вызываете эту функцию.

      Цитата из PHP manual

      float round ( float $val [, int $precision ] )

      Возвращает округлённое значение val с указанной точностью precision (количество цифр после запятой). Последняя может быть отрицательной или нулём (по умолчанию).

      Пример #1 Примеры функции round()

      echo round(3.4); // 3
      echo round(3.5); // 4
      echo round(3.6); // 4
      echo round(3.6, 0); // 4
      echo round(1.95583, 2); // 1.96
      echo round(1241757, -3); // 1242000
      echo round(5.045, 2); // 5.05
      echo round(5.055, 2); // 5.06

  • Ney

    Пожалуй к недостаткам этой библиотеки можно отнести отсутствие нормальной документации и описания всех методов.

    А вообщем и целом — отличная библиотека! Разобраться в ней не сложно. Множество примеров есть.

  • Ney

    Пожалуй к недостаткам этой библиотеки можно отнести отсутствие нормальной документации и описания всех методов.

    А вообщем и целом — отличная библиотека! Разобраться в ней не сложно. Множество примеров есть.

  • Peter

    Посмотрите Google Chart:
    http://code.google.com/intl/ru/apis/chart/

    • Я немного работал с этим сервисом.
      Главное отличие в том, что графики возвращаются в виде картинок (то, что их создает сервер google, а не ваш — не принципиально).
      В общем, если у вас много графиков на странице, то используя flash chart вы существенно снизите трафик.
      Но если нужно решить задачу без использования flash, то google chart api хороший вариант, во всяком случае снимите нагрузку с собственного сервера.

  • Peter

    Посмотрите Google Chart:
    http://code.google.com/intl/ru/apis/chart/

    • Я немного работал с этим сервисом.
      Главное отличие в том, что графики возвращаются в виде картинок (то, что их создает сервер google, а не ваш — не принципиально).
      В общем, если у вас много графиков на странице, то используя flash chart вы существенно снизите трафик.
      Но если нужно решить задачу без использования flash, то google chart api хороший вариант, во всяком случае снимите нагрузку с собственного сервера.

  • Денис

    все делал по инструкции, но такая ситуция получается:
    не подцепляет файл «chart-data.php»
    все время загружает данные из текстового файла
    «./data-files/area-point-objects.txt»

    • А откуда у вас этот файл (area-point-objects.txt) вообще взялся?

      Должно быть только 5 файлов:

      chart-data.php
      index.php
      open_flash_chart_object.php
      open-flash-chart.php
      open-flash-chart.swf

      И еще, нужно очень внимательно проверять пути к файлам. Если сомневаетесь добавьте
      echo $baseURL
      в первый листинг.

      • burik

        Просто на сайте Open Flash Chart в данный момент доступна для скачивания вторая версия, где все сделано несколько иначе. Начиная с имени класса и заканчивая именами функций.

        • Денис

          Да, точно!

        • Интересно, нужно будет посмотреть. Приятно, что хорошая библиотека развивается.

  • Денис

    все делал по инструкции, но такая ситуция получается:
    не подцепляет файл «chart-data.php»
    все время загружает данные из текстового файла
    «./data-files/area-point-objects.txt»

    • А откуда у вас этот файл (area-point-objects.txt) вообще взялся?

      Должно быть только 5 файлов:

      chart-data.php
      index.php
      open_flash_chart_object.php
      open-flash-chart.php
      open-flash-chart.swf

      И еще, нужно очень внимательно проверять пути к файлам. Если сомневаетесь добавьте
      echo $baseURL
      в первый листинг.

      • burik

        Просто на сайте Open Flash Chart в данный момент доступна для скачивания вторая версия, где все сделано несколько иначе. Начиная с имени класса и заканчивая именами функций.

        • Денис

          Да, точно!

        • Интересно, нужно будет посмотреть. Приятно, что хорошая библиотека развивается.

  • Васильев

    Подскажите пожалуйста, всё сделал как описано, при первом заходе на страницу график хоть и отбражается, но выдаёт такую ошибку Notice: Use of undefined constant REQUEST_URI — assumed 'REQUEST_URI'
    При обновлении страницы, графика нет, только остаётся ошибка!

  • Васильев

    Подскажите пожалуйста, всё сделал как описано, при первом заходе на страницу график хоть и отбражается, но выдаёт такую ошибку Notice: Use of undefined constant REQUEST_URI — assumed 'REQUEST_URI'
    При обновлении страницы, графика нет, только остаётся ошибка!

  • Попробуйте добавить кавычки $_SERVER['REQUEST_URI']
    и вывести результат
    echo $_SERVER['REQUEST_URI']
    Вы должны увидеть имя скрипта, начиная от корневой директории виртуального хоста.

  • Попробуйте добавить кавычки $_SERVER['REQUEST_URI']
    и вывести результат
    echo $_SERVER['REQUEST_URI']
    Вы должны увидеть имя скрипта, начиная от корневой директории виртуального хоста.

  • Васильев

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

    • Дело в том, что у меня этот пример работал как раз из внутренней страницы.
      В любом случае нужно проверять пути к подключаемым файлам, т.е. к open_flash_chart_object.php, chart-data.php и open-flash-chart.php. Просто выведите с помощью echo пути к этим файлам и убедитесь, что они правильные.
      Если не получится, можете отправить мне ваш скрипт (vova_33[at]gala.net), я посмотрю в чем дело.

  • Васильев

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

    • Дело в том, что у меня этот пример работал как раз из внутренней страницы.
      В любом случае нужно проверять пути к подключаемым файлам, т.е. к open_flash_chart_object.php, chart-data.php и open-flash-chart.php. Просто выведите с помощью echo пути к этим файлам и убедитесь, что они правильные.
      Если не получится, можете отправить мне ваш скрипт (vova_33[at]gala.net), я посмотрю в чем дело.

  • Васильев

    То есть, даже, когда пишешь http://localhost/curse/ — отображается, а когда http://localhost/curse/index.php — уже нет, хотя это одна и та же страница.

  • Васильев

    То есть, даже, когда пишешь http://localhost/curse/ — отображается, а когда http://localhost/curse/index.php — уже нет, хотя это одна и та же страница.

  • Васильев

    Владимир, я вам отправил письмо! Спасибо!

    • Я почему-то его не получил, проверьте адрес, пожалуйста.

  • Васильев

    Владимир, я вам отправил письмо! Спасибо!

    • Я почему-то его не получил, проверьте адрес, пожалуйста.

  • Не могу ничего сделать, в графике показываются числа с 2-мя знаками после точки, хотя должны быть с 4-мя. Происходит округление — из 30.4588 в 30.46

    Подскажите как поправить?

    • Точно не знаю, попробуйте поэкспериментировать с функциями
      set_x_label_style и set_x_axis_steps. Описание здесь.

  • Не могу ничего сделать, в графике показываются числа с 2-мя знаками после точки, хотя должны быть с 4-мя. Происходит округление — из 30.4588 в 30.46

    Подскажите как поправить?

    • Точно не знаю, попробуйте поэкспериментировать с функциями
      set_x_label_style и set_x_axis_steps. Описание здесь.

  • Евгений

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

    • Для всех графиков используется одна и та же библиотека.
      Просто при создании графика вы вызываете нужный метод. Например,
      $g->bar… строит гистограмму
      $g->line_dot… строит ломаную
      В общем, смотрите исходники под примерами на оф. сайте, там указаны методы, которые использовались.

  • Евгений

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

    • Для всех графиков используется одна и та же библиотека.
      Просто при создании графика вы вызываете нужный метод. Например,
      $g->bar… строит гистограмму
      $g->line_dot… строит ломаную
      В общем, смотрите исходники под примерами на оф. сайте, там указаны методы, которые использовались.

  • Сергей

    у меня при запуске пишет
    C:UsersJohnDocumentsflashsvndata-filesdata-47.txt
    и больше ничего.

    • Этот файл data-47.txt реально существует? Обычно такие сообщения появляются если не правильно указаны пути к файлам.

  • Сергей

    у меня при запуске пишет
    C:\Users\John\Documents\flash\svn\data-files\data-47.txt
    и больше ничего.

    • Этот файл data-47.txt реально существует? Обычно такие сообщения появляются если не правильно указаны пути к файлам.

  • А у меня, при тестировании на локальном сервере, возникла такая проблема: «При изменении входных данных, график не изменяется!!!». Приходится изменять дату на компьютере, чтобы отобразить новый график!

    Как это устранить?! Как сделать динамическое отображение данных?!

    • Очень похоже, что данные у вас кэшируются.
      Попробуйте добавить заголовки

      header(«Cache-Control: no-cache, must-revalidate»);
      header(«Expires: Sat, 26 Jul 1997 05:00:00 GMT»); //дата в прошлом

  • А у меня, при тестировании на локальном сервере, возникла такая проблема: «При изменении входных данных, график не изменяется!!!». Приходится изменять дату на компьютере, чтобы отобразить новый график!

    Как это устранить?! Как сделать динамическое отображение данных?!

    • Очень похоже, что данные у вас кэшируются.
      Попробуйте добавить заголовки

      header(«Cache-Control: no-cache, must-revalidate»);
      header(«Expires: Sat, 26 Jul 1997 05:00:00 GMT»); //дата в прошлом

  • Вы знаете не помогает! Только я добавлял

  • Вы знаете не помогает! Только я добавлял

    • Пожалуйста, не используйте < и >. Неизвестные теги WP обрезает.

  • Вы знаете не помогает! Только я добавлял

  • Вы знаете не помогает! Только я добавлял

    • Пожалуйста, не используйте < и >. Неизвестные теги WP обрезает.

  • Я использовал мета-теги,против кеширования, но результат один и тотже! Так в чем может быть проблема? А Вы пробовали изменять данные? График изменяется постоянно?!

    • Я похоже разобрался 🙂
      Дело в том, что я тестировал в Firefox (в нем все нормально обновляется), а вы, скорее всего, в IE.
      Решил проблему добавлением изменяющегося get параметра в запрос.
      Т.е. строка 5 (листинг 1) теперь выглядит так
      open_flash_chart_object( 400, 250, $baseURL.'/chart-data.php?var='.rand(), false, $baseURL );

  • Я использовал мета-теги,против кеширования, но результат один и тотже! Так в чем может быть проблема? А Вы пробовали изменять данные? График изменяется постоянно?!

    • Я похоже разобрался 🙂
      Дело в том, что я тестировал в Firefox (в нем все нормально обновляется), а вы, скорее всего, в IE.
      Решил проблему добавлением изменяющегося get параметра в запрос.
      Т.е. строка 5 (листинг 1) теперь выглядит так
      open_flash_chart_object( 400, 250, $baseURL.'/chart-data.php?var='.rand(), false, $baseURL );

  • Спасибо большое! Работает!!!

  • Спасибо большое! Работает!!!

  • Подскажите, как добавить загаловок на русском языке?!
    В вашем примере это работает, а у меня нет! Правда я испльзовал другой вид графика!

    • От вида графика это не зависит. Проверьте кодировку, я использовал UTF-8.

  • Подскажите, как добавить загаловок на русском языке?!
    В вашем примере это работает, а у меня нет! Правда я испльзовал другой вид графика!

    • От вида графика это не зависит. Проверьте кодировку, я использовал UTF-8.

  • Я пробовал и UTF-8 и windows-1251, но все равно не выходит!!!

    • В конце этой статьи ссылка на архив с моим примером. Он у вас правильно отображается?

      • Softm39

        Писал коммент, а он не показывается?
        http://mytavria.org.ua/chart.php
        Кароче достал опенчарт …
        покажите .htaccess может?

  • Я пробовал и UTF-8 и windows-1251, но все равно не выходит!!!

    • В конце этой статьи ссылка на архив с моим примером. Он у вас правильно отображается?

  • В том то и загвоздка! Ваш пример правильно отображается!
    Вообще не пойму где мой косяк!!!

    Я пытаюсь прикрутить эту библиотеку к CodeIgniter! Все получается, вот только с загаловком проблема!!!

    • Я все-таки думаю, что чудес не бывает 😉
      Может где-то в CI есть скрипт сохраненный в кодировке вроде latin-1?
      Кстати, попробуйте обратиться к скрипту, который формирует данные для графика прямо из браузера и посмотрите в какой кодировке он возвращает данные.

    • Softm39

      Кстати аналогично. Пример — не работает.
      http://mytavria.org.ua/chart.php
      Заголовок не выводиться … Может где надо шрифты подгрузить?

      • Попробуйте написать заголовок на английском.
        Я не использовал какой-то специальный .htaccess, точнее у меня все работало вообще без него.

  • В том то и загвоздка! Ваш пример правильно отображается!
    Вообще не пойму где мой косяк!!!

    Я пытаюсь прикрутить эту библиотеку к CodeIgniter! Все получается, вот только с загаловком проблема!!!

    • Я все-таки думаю, что чудес не бывает 😉
      Может где-то в CI есть скрипт сохраненный в кодировке вроде latin-1?
      Кстати, попробуйте обратиться к скрипту, который формирует данные для графика прямо из браузера и посмотрите в какой кодировке он возвращает данные.

  • roman

    У меня та же проблема,что и у Сергея.
    Вместо графика появляется окошко (типа как под график), и в нем выводится:

    * C:UsersJohnDocumentsflashsvndata-filesdata-47.txt

    • Вы взяли пример с оф. сайта?
      Путь к файлу с данными так выглядеть не должен. Это реальное размещение файла, а нужно указать его адрес
      http://…./data-47.txt

  • roman

    У меня та же проблема,что и у Сергея.
    Вместо графика появляется окошко (типа как под график), и в нем выводится:

    * C:\Users\John\Documents\flash\svn\data-files\data-47.txt

    • Вы взяли пример с оф. сайта?
      Путь к файлу с данными так выглядеть не должен. Это реальное размещение файла, а нужно указать его адрес
      http://…./data-47.txt

  • sans123

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

    • Это смотря с какой стороны посмотреть. Иногда это плюс, всё зависит от требований к проекту.
      Я флешем не занимался, но, по-моему, там есть возможность генерировать изображения. Правда это уже будет отдельная разработка.

      Если не секрет, какое решение вы выбрали для себя?

  • sans123

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

    • Это смотря с какой стороны посмотреть. Иногда это плюс, всё зависит от требований к проекту.
      Я флешем не занимался, но, по-моему, там есть возможность генерировать изображения. Правда это уже будет отдельная разработка.

      Если не секрет, какое решение вы выбрали для себя?

  • Как раз строю графики, точнее надо. Думаю буду юзать вот этот компанент, но знаете есть проблемка, помогите решить 🙂

    в базе есть суммы $, которые храняться с датами, тоесть какая сумма была полученна в определенное время тоесть тип поле DATETIME

    как выбрать для построения графика только дневные суммы, тоесть допусти есть 5 сумм, 2 получены 8 числа в 10 часов (2$) и 15 часов (1$), 3 остальные 9 числа в 10 часов(2$), 17(2$), 20 часов(1$).

    Тоесть как сделать чтоб из базы вытащить именно суммы касательно дня целиком, тоесть 8 числа (3$) и 9 числа (5$)

    возможно это средствами sql запроса или над уже через php допинывать?

  • Как раз строю графики, точнее надо. Думаю буду юзать вот этот компанент, но знаете есть проблемка, помогите решить 🙂

    в базе есть суммы $, которые храняться с датами, тоесть какая сумма была полученна в определенное время тоесть тип поле DATETIME

    как выбрать для построения графика только дневные суммы, тоесть допусти есть 5 сумм, 2 получены 8 числа в 10 часов (2$) и 15 часов (1$), 3 остальные 9 числа в 10 часов(2$), 17(2$), 20 часов(1$).

    Тоесть как сделать чтоб из базы вытащить именно суммы касательно дня целиком, тоесть 8 числа (3$) и 9 числа (5$)

    возможно это средствами sql запроса или над уже через php допинывать?

  • наверно никто ничего не понял) так что пишу вот так

    БАЗА

    Дата | сумма
    ————————
    8 апреля 10:00 | 2$
    8 апреля 15:00 | 1$
    9 апреля 10:00 | 2$
    9 апреля 17:00 | 2$
    9 апреля 20:00 | 2$

    как выбрать чтоб получилось:

    8 апреля | 3$
    9 апреля | 5$

    • Запрос будет выглядеть примерно так:
      SELECT sum(поле_суммы) FROM таблица WHERE HOUR(поле_даты) > 10 AND HOUR(поле_даты) < 18 GROUP BY DAY(поле_даты)

      Здесь я предполагаю, что рабочий день с 10-00 до 18-00.

      Запрос я не тестировал, поэтому если будут ошибки, пишите, но, надеюсь, идея ясна.

      P.S. Как в вашем примере получить 5$ для 9 апреля я так и не понял.

      • давайте выражусь немного подругому,

        у нас сумма и точное время ее прихода, как извлеч из БАЗЫ данные так, чтобы сразу было видно сколько $ полученно в каждый день работы…

        • Т.е. запрос, который я написал не работает?

          В вашем примере 9 апреля в сумме пришло 6 $, 2+2+2. Как из них получить 5 я не понял.

        • так дело не в том что 2+2+2 = 6 или 5 я может ошибся, я к тому что нужно получить так сказать массив из БД тоесть день и привязанную к нему сумму, а в базе у нас сумма привязанна к определенному моменту времени, тоесть в день может быть две, три, десять сумм, нужно вывести из базы именно 30 строк, если месяцй из 30 дней, надеюсь все теперь понятно =)

        • Но мой запрос именно так и должен вывести данные.
          GROUP BY DAY(поле_даты) делает группировку по дню месяца.
          sum(поле_суммы) — суммирует значение в поле суммы для каждого дня (т.к. группировка выполняется по дням).
          WHERE HOUR(поле_даты) > 10 AND HOUR(поле_даты) < 18 — убирает из результатов записи, которые не попадают в рабочий день.

        • Хм попробую щас, посмотрим что будет )

        • он мне вывель только суммы, тоесть столбик сумм, а к чему они прявязанны — хз) мне надо 2 поля чтоб вывел, сумму и день, в который получена эта сумма, как я график то буду строить)?

        • Мля! сделал!

          Кому надо держите! все дело было в функции DATE_FORMAT

          SELECT sum(`Поле_суммы`) as сумма, DATE_FORMAT(поле_даты_времени, '%Y-%m-%d') as дата_день
          FROM `таблица_денег`
          GROUP BY дата_день

          все работает как надо)
          спасиб за наводку, Владимир!

  • наверно никто ничего не понял) так что пишу вот так

    БАЗА

    Дата | сумма
    ————————
    8 апреля 10:00 | 2$
    8 апреля 15:00 | 1$
    9 апреля 10:00 | 2$
    9 апреля 17:00 | 2$
    9 апреля 20:00 | 2$

    как выбрать чтоб получилось:

    8 апреля | 3$
    9 апреля | 5$

    • Запрос будет выглядеть примерно так:
      SELECT sum(поле_суммы) FROM таблица WHERE HOUR(поле_даты) > 10 AND HOUR(поле_даты) < 18 GROUP BY DAY(поле_даты) Здесь я предполагаю, что рабочий день с 10-00 до 18-00. Запрос я не тестировал, поэтому если будут ошибки, пишите, но, надеюсь, идея ясна. P.S. Как в вашем примере получить 5$ для 9 апреля я так и не понял.

      • давайте выражусь немного подругому,

        у нас сумма и точное время ее прихода, как извлеч из БАЗЫ данные так, чтобы сразу было видно сколько $ полученно в каждый день работы…

        • Т.е. запрос, который я написал не работает?

          В вашем примере 9 апреля в сумме пришло 6 $, 2+2+2. Как из них получить 5 я не понял.

        • так дело не в том что 2+2+2 = 6 или 5 я может ошибся, я к тому что нужно получить так сказать массив из БД тоесть день и привязанную к нему сумму, а в базе у нас сумма привязанна к определенному моменту времени, тоесть в день может быть две, три, десять сумм, нужно вывести из базы именно 30 строк, если месяцй из 30 дней, надеюсь все теперь понятно =)

        • Но мой запрос именно так и должен вывести данные.
          GROUP BY DAY(поле_даты) делает группировку по дню месяца.
          sum(поле_суммы) — суммирует значение в поле суммы для каждого дня (т.к. группировка выполняется по дням).
          WHERE HOUR(поле_даты) > 10 AND HOUR(поле_даты) < 18 - убирает из результатов записи, которые не попадают в рабочий день.

        • Хм попробую щас, посмотрим что будет )

        • он мне вывель только суммы, тоесть столбик сумм, а к чему они прявязанны — хз) мне надо 2 поля чтоб вывел, сумму и день, в который получена эта сумма, как я график то буду строить)?

        • Мля! сделал!

          Кому надо держите! все дело было в функции DATE_FORMAT

          SELECT sum(`Поле_суммы`) as сумма, DATE_FORMAT(поле_даты_времени, '%Y-%m-%d') as дата_день
          FROM `таблица_денег`
          GROUP BY дата_день

          все работает как надо)
          спасиб за наводку, Владимир!

  • да кстати тут возникал вопрос, проблема, что мол флеш неудобно если надо копировать изображение графика, я лично нашел решение буду в этом случае юзать
    Google Charts API
    http://code.google.com/intl/ru-RU/apis/chart/image_charts.html

  • да кстати тут возникал вопрос, проблема, что мол флеш неудобно если надо копировать изображение графика, я лично нашел решение буду в этом случае юзать
    Google Charts API
    http://code.google.com/intl/ru-RU/apis/chart/image_charts.html

  • или нашел еще кое что — http://web20.su/blog/razrabotka/pchart-review/

    графики на выходе — картинки.

  • или нашел еще кое что — http://web20.su/blog/razrabotka/pchart-review/

    графики на выходе — картинки.

  • Александр

    Решил себе прикрутить, тоже график.
    Ну и намучился я с ним.
    Оказалось, библиотека скачанная мной на сайте разработчика не соответствует примерам не только на этом сайте, но и на ихнем же.
    Скачал библиотеку с этого сайта и всё заработало отлично.
    Автору спасибо за перевод.

    • Пожалуйста 🙂

      Если честно, я довольно давно не пользовался этой библиотекой, раньше с документацией все было в порядке. Жалко, что ее качество ухудшилось.

  • Андрей Пронин

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

    while($row = mysql_fetch_array($result)){
    $data[] .= array($row['pressure']);
    }
    так не работает

    если руками то работает
    $data = array();
    $data[] = 744.20;
    $data[] = 743.20;
    и т.д….
    в чем причина, где ошибка?

    • Андрей Пронин

      сам понял…. intval( надо, спасибо