За последние 24 часа нас посетили 17107 программистов и 1437 роботов. Сейчас ищут 1563 программиста ...

Денежный отчёт(график!?)

Тема в разделе "Сделайте за меня", создана пользователем elektryk, 24 июл 2017.

  1. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, да. Если Вам нужно только на один месяц и Вы не будете отображение на весь год делать, то можно упростить:
    PHP:
    1. $array = file('plusXY.txt');
    2. $max_y = 0;
    3. $mg = '/' . date('mY') . '$/';
    4. $debet = [];
    5.             foreach ( $array as $stroka )
    6.             {
    7.                 $parts = explode(' ', $stroka);
    8.                 if (preg_match($mg, $parts[0]))
    9.                 {
    10.                     $debet[] = [
    11.                         (int) substr( $parts[0], 0, 2 ),
    12.                         (int) $parts[1]
    13.                     ];
    14.                     if($parts[1] > $max_y)
    15.                     {
    16.                         $max_y = (int) $parts[1];
    17.                     }
    18.                 }
    19.             }
    20.             usort( $debet,
    21.                 function( $a, $b )
    22.                 {
    23.                     return $a[0] - $b[0];
    24.                 }
    25.             );
    26. echo $max_y ;
    В первоначальном варианте я предложил использовать объект DateTime в качестве значения даты. Он легко переводится в любой формат, но для отображения на месяц достаточно просто числа.
     
    #76 Maputo, 7 авг 2017
    Последнее редактирование: 7 авг 2017
  2. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    можно код подсмотреть от первого графика ?-)
     
  3. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, он через классы сделан:
    test.php
    PHP:
    1. <?php
    2. require_once ('grafik.class.php');
    3.  
    4. $img = new Grafik(2017, 7);
    5. $img->add_data('plusXY.txt', 'blue');
    6. $img->add_data('minusXY.txt', 'cyan');
    7. $img->display(1300, 400);
    grafik.class.php
    PHP:
    1. <?php
    2. require_once (__DIR__ . '/datagram.class.php');
    3. require_once (__DIR__ . '/imgpng.class.php');
    4.  
    5. class Grafik
    6. {
    7.     private $img;
    8.     private $datagrams = [];
    9.     private $offset = [ 'x' => 48, 'y' => 32, 'top' => 5, 'right' => 20 ];
    10.     private $step = [ 'x' => 1, 'y' => 1 ];
    11.     private $y_arr = [500, 1000, 2000, 5000, 10000, 15000, 20000, 25000, 50000, 75000, 100000, 150000, 200000, 250000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1500000];
    12.     private $start = [ 'x' => 1, 'y' => 0 ];
    13.     private $year = 0;
    14.     private $month = 0;
    15.     private $datastring = '';
    16.     private $max_x = 370;
    17.     private $max_y = 10000;
    18.  
    19.     public function __construct($year, $month = 0)
    20.     {
    21.         if ($year > 0)
    22.         {
    23.             $this->year = (int) $year;
    24.         }
    25.         if ($month > 0 && $month < 13)
    26.         {
    27.             $this->month = (int) $month;
    28.             $this->max_x = cal_days_in_month(CAL_GREGORIAN, $this->month, $this->year);
    29.             $this->datastring = date("F Y", mktime(0, 0, 0, $this->month, 1, $this->year));
    30.         } else {
    31.             $this->datastring = date("Y", mktime(0, 0, 0, 1, 1, $this->year));
    32.         }
    33.     }
    34.  
    35.     public function add_data($filename, $color = 'black')
    36.     {
    37.         $a = new Datagram($filename, $this->year, $this->month);
    38.         if ($this->max_y < $a->maxY())
    39.         {
    40.             $this->max_y = $a->maxY();
    41.         }
    42.         $this->datagrams[] = [$a, $color];
    43.     }
    44.  
    45.     public function display($width = 800, $height = 600)
    46.     {
    47.         $this->img = new ImgPNG($width, $height);
    48.         $this->step['x'] = ($this->img->getSize('w') - $this->offset['x'] - $this->offset['right']) / ($this->max_x - $this->start['x']);
    49.         $this->step['y'] = ($this->img->getSize('h') - $this->offset['y'] - $this->offset['top']) / ($this->max_y * 1.02 - $this->start['y']);
    50.         $this->draw_grid();
    51.         foreach ($this->datagrams as $n => $d) {
    52.             $this->draw_datagram($d[0]->getData(), $d[1], $n);
    53.         }
    54.         $this->draw_axes();
    55.         $this->img->display();
    56.     }
    57.  
    58.     private function draw_axes()
    59.     {
    60.         $this->img->setWidth(2);
    61.         // ось X
    62.         $this->img->add_line($this->offset['x'], $this->getY(0), $this->getX($this->max_x - 1), $this->getY(0), 'black');
    63.         // ось Y
    64.         $this->img->add_line($this->offset['x'], $this->getY(0), $this->offset['x'], $this->offset['top'], 'black');
    65.         $this->img->setWidth(1);
    66.     }
    67.  
    68.     private function draw_grid()
    69.     {
    70.         $xn = 0;
    71.         for ($i = 0; $i < $this->max_x; $i++)
    72.         {
    73.             $x = $this->getX($i);
    74.             $interval = ($this->month > 0)? 16: 32;
    75.             if (($x - $xn) > $interval)
    76.             {
    77.                 $this->img->add_line($x, $this->getY(0), $x, $this->offset['top']);
    78.                 if($this->month > 0)
    79.                 {
    80.                     $str = $i + 1;
    81.                 } else {
    82.                     $str =  date_format(date_create_from_format( 'z Y', $i . ' ' . $this->year), 'j/m');
    83.                 }
    84.                 $this->img->add_string($str, $x - 5, $this->getY(0) + 5, 'black');
    85.                 $xn = $x;
    86.             }
    87.         }
    88.         $this->img->add_string($this->datastring, $this->getX($this->max_x / 2) - 30, $this->getY(0) + 20, 'black');
    89.         $yn = $this->getY(0);
    90.         foreach ($this->y_arr as $y) {
    91.             if ($y <= $this->max_y)
    92.             {
    93.                 $y1 = $this->getY($y);
    94.                 if (($yn - $y1) > 10)
    95.                 {
    96.                     $this->img->add_line($this->offset['x'], $y1, $this->getX($this->max_x - 1), $y1);
    97.                     $this->img->add_string($y, 5, $y1 - 5, 'black');
    98.                     $yn = $y1;
    99.                 }
    100.             }
    101.         }
    102.     }
    103.  
    104.     private function draw_datagram($arr, $color, $k = 0)
    105.     {
    106.         $t = 2;
    107.         $this->img->setWidth($t);
    108.         $s = [$this->start['x']-1, $this->start['y']];
    109.         foreach ($arr as $point) {
    110.             $x = date_format($point[0], ($this->month > 0)? 'j': 'z') - 1;
    111.             if($this->month == 0){$x++;}
    112.             $this->img->add_line($this->getX($s[0]), $this->getY($s[1]), $this->getX($x), $this->getY($point[1]), $color);
    113.             $s[0] = $x;
    114.             $s[1] = $point[1];
    115.         }
    116.         $this->img->setWidth(1);
    117.     }
    118.  
    119.     private function getX($x)
    120.     {
    121.         return $this->offset['x'] + $x * $this->step['x'];
    122.     }
    123.  
    124.     private function getY($y)
    125.     {
    126.         $h = $this->img->getSize('h');
    127.         return $h - $this->offset['y'] - $y * $this->step['y'];
    128.     }
    129. }
    datagram.class.php
    PHP:
    1. <?php
    2.  
    3. class Datagram
    4. {
    5.     private $data = [];
    6.     private $max_y = 0;
    7.  
    8.     public function __construct ($file_name, $year, $month = 0)
    9.     {
    10.         if (file_exists($file_name) && $year > 0) {
    11.             $pattern = '/';
    12.             if ($month > 0 && $month < 13)
    13.             {
    14.                 $pattern .= str_pad((int) $month, 2, "0", STR_PAD_LEFT);
    15.             }
    16.             $pattern .= str_pad((int) $year, 4, "0", STR_PAD_LEFT) . '$/';
    17.             $this->read( $file_name, $pattern );
    18.             $this->data_sort();
    19.         }
    20.     }
    21.  
    22.     public function maxY()
    23.     {
    24.         return $this->max_y;
    25.     }
    26.  
    27.     public function getData()
    28.     {
    29.         return $this->data;
    30.     }
    31.  
    32.     public function getSum()
    33.     {
    34.         return array_sum(array_column($this->data, 1));
    35.     }
    36.  
    37.     private function read($file_name, $pattern)
    38.     {
    39.         $f = fopen( $file_name, 'r' );
    40.         while( $line = fgets( $f ) )
    41.         {
    42.             $parts = explode(' ', $line);
    43.             if (preg_match($pattern, $parts[0]))
    44.             {
    45.                 $this->data[] = [
    46.                     date_create_from_format( 'dmY', $parts[0] ),
    47.                     (int) $parts[1]
    48.                 ];
    49.                 if($parts[1] > $this->max_y)
    50.                 {
    51.                     $this->max_y = (int) $parts[1];
    52.                 }
    53.             }
    54.         }
    55.     }
    56.  
    57.     private function data_sort()
    58.     {
    59.         usort( $this->data,
    60.             function( $a, $b )
    61.             {
    62.                 return date_format($a[0], 'Ymd') - date_format($b[0], 'Ymd');
    63.             }
    64.         );
    65.     }
    66. }
    imgpng.class.php
    PHP:
    1. <?php
    2.  
    3. class ImgPNG
    4. {
    5.     private $image_resourse;
    6.     private $size = ['w' => 800, 'h' => 600];
    7.     private $colors = [];
    8.  
    9.     public function __construct($width, $height)
    10.     {
    11.         if ($width > 300 && $height > 200) {
    12.             $this->size['w'] = (int) $width;
    13.             $this->size['h'] = (int) $height;
    14.         }
    15.         $this->image_resourse = imagecreatetruecolor($this->size['w'], $this->size['h']);
    16.         $this->create_colors();
    17.         imagefill ($this->image_resourse, 1, 1, $this->colors['white']);
    18.  
    19.     }
    20.  
    21.     public function setWidth($w)
    22.     {
    23.         if ($w >= 1) {
    24.             imagesetthickness ( $this->image_resourse, (int)$w );
    25.         }
    26.     }
    27.  
    28.     public function getSize($key = 'w')
    29.     {
    30.         if (isset($this->size[$key])) {
    31.             return $this->size[$key];
    32.         } else {
    33.             return 0;
    34.         }
    35.     }
    36.  
    37.     public function add_line($x1, $y1, $x2, $y2, $color = 'l_grey')
    38.     {
    39.         if (!isset($this->colors[$color]))
    40.         {
    41.             $color = 'magenta';
    42.         }
    43.         imageline($this->image_resourse, (int)$x1, (int)$y1, (int)$x2, (int)$y2, $this->colors[$color]);
    44.     }
    45.  
    46.     public function add_string($string, $x, $y, $color = 'l_grey')
    47.     {
    48.         if (!isset($this->colors[$color]))
    49.         {
    50.             $color = 'magenta';
    51.         }
    52.         imagestring($this->image_resourse, 1, (int)$x, (int)$y, $string, $this->colors[$color]);
    53.     }
    54.  
    55.     public function display()
    56.     {
    57.         header('Content-type: image/png');
    58.         imagepng($this->image_resourse, NULL, 0);
    59.     }
    60.  
    61.     private function create_colors()
    62.     {
    63.         $this->colors['white'] = ImageColorAllocate ($this->image_resourse, 255, 255, 255);
    64.         $this->colors['black'] = ImageColorAllocate ($this->image_resourse, 0, 0, 0);
    65.         $this->colors['red'] = ImageColorAllocate ($this->image_resourse, 220, 60, 60);
    66.         $this->colors['pink'] = ImageColorAllocate ($this->image_resourse, 220, 120, 80);
    67.         $this->colors['green'] = ImageColorAllocate ($this->image_resourse, 50, 120, 0);
    68.         $this->colors['blue'] = ImageColorAllocate ($this->image_resourse, 0, 50, 200);
    69.         $this->colors['yellow'] = ImageColorAllocate ($this->image_resourse, 255, 220, 0);
    70.         $this->colors['magenta'] = ImageColorAllocate ($this->image_resourse, 160, 0, 200);
    71.         $this->colors['cyan'] = ImageColorAllocate ($this->image_resourse, 0, 180, 220);
    72.         $this->colors['l_grey'] = ImageColorAllocate ($this->image_resourse, 220, 220, 220);
    73.         $this->colors['d_grey'] = ImageColorAllocate ($this->image_resourse, 50, 50, 50);
    74.     }
    75. }
    Для вывода на год в файле test.php достаточно убрать месяц.
     
    elektryk нравится это.
  4. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    это волшебство!!!!
     
  5. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, в цветах поправьте grey на gray и imagecolorallocate строчными. Я этот код скопировал у Вас, но забыл поправить.
     
  6. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    почему так получается?:
    Код (Text):
    1. //Определяем размер экрана
    2. $width='<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>';
    3. $height='<script>var ScreenHeight = screen.height;document.write(ScreenHeight);</script>';
    4. echo''.$width.' x '.$height.'' , "<br>";
    5. $w = (int) $width;
    6. $h = (int) $height;
    на выходе:

    1600 x 900
    0 0
     
  7. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, Вы пытаетесь из строки получить число. 5 и 6 строчки не дадут Вам размер экрана. Это надо на стороне клиента javascript-ом определять размеры и передавать их на сервер. А почему именно размер экрана, а не размер окна браузера или размер блока, в котором будет картинка?
     
  8. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вставляете в html-код страницы:
    HTML:
    1. <script>document.write('<img src="' + window.location.protocol + "//" + window.location.host + "/graf.php?wh=" + screen.width + 'x' + screen.height + '">');</script>
    Создаете файл graf.php, в котором такое содержимое:
    PHP:
    1. <?php
    2. require_once ('grafik.class.php'); // путь к файлу можно и другой
    3. $w = 800;
    4. $h = 400;
    5. $match = [];
    6. $god = date('Y');
    7. $mesyac = date('n');
    8.  
    9. if (isset($_GET['wh']) && preg_match('/(\d{3,4})x(\d{3,4})/', $_GET['wh'], $match))
    10. {
    11.     $w = $match[1];
    12.     $h = $match[2];
    13. }
    14.  
    15. $img = new Grafik($god, $mesyac);
    16. $img->add_data('plusXY.txt', 'blue');
    17. $img->add_data('minusXY.txt', 'cyan');
    18. $img->display($w, $h);
     
  9. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    с таким кодом:
    PHP:
    1. <?php
    2. $w = 800;
    3. $h = 400;
    4. //ищем количество дней в текущем месяце, попутно выясняя какой сейчас год и месяц
    5. $god = date('Y'); //значение текущего года
    6. $mesac = date('n'); //значение текущего месяца
    7. $number = cal_days_in_month(CAL_GREGORIAN, $mesac, $god); // вычисление дней
    8.  
    9. //Определяем размер экрана
    10. if (isset($_GET['wh']) && preg_match('/(\d{3,4})x(\d{3,4})/', $_GET['wh'], $match))
    11. {
    12.     $w = $match[1];
    13.     $h = $match[2];
    14. }
    15.  
    16. require_once ('grafik.class.php');
    17. $img = new Grafik('$god', '$mesac');
    18. $img->add_data('plusXY.txt', 'green');
    19. $img->add_data('minusXY.txt', 'red');
    20. $img->display($w, $h);
    21. ?>
    получилось следующее:
    gra.png
    цифры поехали, и точек нет(
    и размер графика маловат(((
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, :D А зачем Вы год и месяц взяли в кавычки? Размер берется по-умолчанию 800 на 400 как написано в верху, если GET - параметров в нужном виде не передается.
    надо к скрипту обращаться с GET параметром wh:
    graf.php?wh=1600x900

    Это реализовано в html с помощью javascript.

    P.S.: В файле graf.php закрывающий '?>' не только необязательный, а даже вредительский.
     
    #85 Maputo, 7 авг 2017
    Последнее редактирование: 7 авг 2017
  11. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    график встроен в как iframe в таблицу главного файла index.php
    Код (Text):
    1. <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"
    2. header('Content-Type: text/html; charset= utf-8');>
    3. <html>
    4.  
    5.   <head>
    6.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    7.    <title>График расходов и приходов</title>
    8.    <style> .knopa { text-align: center; vertical-align: middle; height: 100%; width: 100%; color: black; font-size: 14pt; background: grey; border-radius: 5px;} </style>
    9.    <style> .td { text-align: center; vertical-align: middle; width: 25%; height: 6%;} </style>
    10.    <style> .vvod { text-align: center; vertical-align: middle; height: 100%; width: 100%; color: black; font-size: 14pt; background: white; border-radius: 5px;} </style>
    11.  
    12.   </head>
    13.  
    14. <body>
    15.     <form method="post" action="reg.php" id="myform">
    16. <table height="99%" width="99%" align="center" valign="middle" border="0">
    17. <tr>
    18.   <td class="td">
    19.    <input type="submit" name="plus" value="Приход" form="myform" class="knopa"/>
    20.   </td>
    21.   <td class="td">
    22.    <input type="text" name="mani" size="22" placeholder="пример: 1000" form="myform" class="vvod"/>
    23.   </td>
    24.   <td class="td">
    25.    <input type="submit" name="minus" value="Расход" form="myform" class="knopa"/>
    26.   </td>
    27.   <td class="td">
    28.    <?php
    29.     $fh = fopen('out.txt', 'r');
    30.     $varik = fgets($fh);
    31.     fclose($fh);
    32.     echo "Итог: $varik";
    33.    ?>
    34.   </td>
    35. </tr>
    36. <tr>
    37.   <td colspan="4" align="center" valign="middle">
    38.       <iframe width="100%" height="100%" src="graf.php" scrolling="no">
    39.   </td>
    40. </tr>
    41. </table>
    42. </form>
    43. </body>
    44. </html>
     
  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, значит Вам нужно определять не размеры экрана, а размеры iframe. И src для iframe определяете так же как я выше писал для img. Или в src передаете не graf.php а html-документ со скриптом, что я писал выше.

    Можно так (файл html, который передается в iframe):
    HTML:
    1. <body style="margin:0;">
    2. <script>document.write('<img src="' + window.location.protocol + "//" + window.location.host + "/graf.php?wh=" + document.body.clientWidth + 'x' + document.body.clientHeight + '">');</script>
    3. </body>
    Результат покажете?
     
    #87 Maputo, 7 авг 2017
    Последнее редактирование: 7 авг 2017
  13. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    вот результат: gra.png
    горизонтальная ось и год не сходятся.
     
  14. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, Вы кавычки не убрали
    PHP:
    1. $img = new Grafik('$god', '$mesac');
     
    elektryk нравится это.
  15. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    ураааа!!!!!
    супер!!!
    можно ещё вопрос, как по вертикальной оси выставить только те значения, которые есть, а не шаблонные, как
    grafik.class.php в строке private $y_arr
    ?
     
  16. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, а какие значения нужно, чтобы отображались?
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Можно немного изменить метод для рисования сетки:
    PHP:
    1. private function draw_grid()
    2.     {
    3.         $xn = 0;
    4.         for ($i = 0; $i < $this->max_x; $i++)
    5.         {
    6.             $x = $this->getX($i);
    7.             $interval = ($this->month > 0)? 16: 32;
    8.             if (($x - $xn) > $interval)
    9.             {
    10.                 $this->img->add_line($x, $this->getY(0), $x, $this->offset['top']);
    11.                 if($this->month > 0)
    12.                 {
    13.                     $str = $i + 1;
    14.                 } else {
    15.                     $str =  date_format(date_create_from_format( 'z Y', $i . ' ' . $this->year), 'j/m');
    16.                 }
    17.                 $this->img->add_string($str, $x - 5, $this->getY(0) + 5, 'black');
    18.                 $xn = $x;
    19.             }
    20.         }
    21.         $this->img->add_string($this->datastring, $this->getX($this->max_x / 2) - 30, $this->getY(0) + 20, 'black');
    22.         $yn = $this->getY(0);
    23.         for ($y = 500; $y <= ($this->max_y * 1.01); $y += 500)
    24.         {
    25.             $y1 = $this->getY($y);
    26.             if (($yn - $y1) > 10)
    27.             {
    28.                 $this->img->add_line($this->offset['x'], $y1, $this->getX($this->max_x - 1), $y1);
    29.                 $this->img->add_string($y, 5, $y1 - 5, 'black');
    30.                 $yn = $y1;
    31.             }
    32.         }
    33.     }
    Минимальный шаг 500 руб с учетом, что расстояние между делениями сетки не менее 10 пикселей.
     
    #92 Maputo, 7 авг 2017
    Последнее редактирование: 7 авг 2017
  18. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Я конечно извиняюсь за глупый вопрос, но нахера делать график на стороне сервера?
     
  19. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, а какие преимущества дает в данном случае клиентская сторона?
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Картинку можно отправить по почте, например, или встроить фоном страницы.
     
  21. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Кроме того, что это проще, нагляднее и удобнее, а так же не создает лишней нагрузки на сервер - никаких преимуществ нет.
     
  22. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, пока вариантов проще и нагляднее никто не предлагал.
     
  23. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Maputo нравится это.
  24. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @romach, теперь надо автору топика рассказать как их применить ;)
     
    xaker01 нравится это.
  25. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    Доброе утро.
    Спасибо за вопросы и помощь, а также за примеры.
    Конкретная задача данного графика - визуализация доходов - расходов в онлайн режиме.
    Сервером могут пользоваться разные люди, вносить изменения и сразу же видеть результат.
    Этот график уже проверен на многих устройствах, в том числе с Linux, MacOS, iOS, Android, Ubuntu Phone.
    Всё замечательно отображается и работает.
    О чём-то другом даже не мечтаю.
    Спасибо всем ещё раз и отдельное огромное спасибо @Maputo
     
    Maputo нравится это.