Вот такой вывод “гистограммы” на основе данных массива
Нет никаких графических библиотек, чистый PHP и символ псевдографики ▓ (ASCII 2593). Разная насыщенность:
- значение более 70% от размера ячейки
- значение менее полного размера ячейки
- нет значения – фон
Для построения используется цифровой массив – могут быть положительные и отрицательные данные.
Массив ниже – данные вначале более актуальные по времени, поэтому в коде используется реверс (что бы эти данные оказались справа на гистограмме)
$arr_count = array (150,145,20,10,5,0,99,85,41,34,21,56,75,46,78,34,125,130,128,10,15,24,50,30,20,0,10,20,30,50,30,20,10,5,0,5,10,20,30,50,150,145);
Да – точность не особо высокая, но это гистограмма для оценки ситуации. Можно использовать в админке для служебных целей или для простого вывода на странице.
Вот еще “график” при наличии отрицательных значений в массиве

Сами данные ниже, есть отрицательные значения
$arr_count = array (150,145,20,10,5,0,99,85,41,34,21,56,75,46,78,34,125,130,128,10,15,24,50,30,20,0,-10,-20,-30,-50,-30,-20,-10,-5,0,5,10,20,30,50,150,145);
Код PHP – функция вызывается с передачей ей цифрового массива.
Параметры:
- массив
- необходимость реверса массива (по умолчанию False)
- высота вывода в строках, по умолчанию 20.
echo tsl_graph ($arr_count);
/////----------------------------------------------------------------
function tsl_graph ($arr_count, $revesr_arr = FALSE, $high_star = 20) {
//$arr_count - числовой массив для вывода с использованием псевдографики
//$revesr_arr - необходимость реверса массива, по умолчанию FALSE
//$high_star - число строк для вывода "графики", по умолчанию 20
$count_total = array_sum($arr_count) ; //сумма данных в массиве
$arr_count_new = ($revesr_arr ? array_reverse($arr_count) : $arr_count); //реверс
$len_count_total = count($arr_count_new); //число элементов массива
$max_array = max($arr_count_new);
$min_array_var = min($arr_count_new);
$min_array = ($min_array_var < 0 ? $min_array_var : 0); //диапазон с учетом отрицательных значений
$pik_arr = ($max_array - $min_array)/$high_star; //значение одного "деления" по вертикали
$graph_line = '';
$num_line = $high_star; //самая верхняя строка графика
//сверху вниз
while ($num_line > 0) {
//формируем строку, используем одинаковый символ с разным цветом - иначе разная ширина
$star_line = '';
$num_element = 0;
$shift = $min_array/$pik_arr ; //смещение при наличии отрицательных чисел
while ($num_element < $len_count_total) {
$virt_line = $num_line + $shift ; //для 0 без изменений, для отрицательного будет вычитаться
if ( ($arr_count_new[$num_element] > 0) && ($virt_line > 0 ) ) { //для положительных чисел и положительных строк
$tail = $arr_count_new[$num_element] - ($pik_arr*($virt_line-1)); //хвост
if ($tail >= ($pik_arr*0.7)){ // красим полностью при 70%
$star_line .= '▓';
}elseif ($tail >0 && $tail < $pik_arr) {
$star_line .= '▓'; // слабый серый для мелких показаний
}else{
$star_line .= '▓'; //фон
}
}elseif ( ($arr_count_new[$num_element] < 0) && ($virt_line <= 0 ) ){ //для отрицательных чисел и линии 0, -1, -2
$tail = abs($arr_count_new[$num_element]) + ($pik_arr*($virt_line)); //хвост
if ($tail >= ($pik_arr*0.7)){ // красим полностью при 70%
$star_line .= '▓';
}elseif ($tail >0 && $tail < $pik_arr) {
$star_line .= '▓'; // слабый серый для мелких показаний
}else{
$star_line .= '▓'; //фон
}
}else{ // ноль - делать черту не работает = ширина разная и график разваливается
$star_line .= '▓';
}
$num_element = $num_element + 1;
}
//сборка элементов массива в одну строку с переводами строк
$graph_line .= $star_line.'
';
$num_line = $num_line - 1;
}
return '
'.$graph_line.'
Total '.$count_total.'
';
}
Комментарии:
- используется символ псевдографики ▓ (ASCII 2593)
- символ используется и для гистограммы и для фона (серым цветом)
- разные символы использовать нельзя, т.к. шрифты в разных браузерах могут быть разными и толщина их тоже может быть разной
- можно использовать реверс массива, т.к. обычно более свежие данные в начале массива (в начале таблицы), а на графике они должны оказаться справа – при желании можно отключить, код простой
- функция возвращает строку html с графиком и суммой элементов массива
- гистограмма использована вместо точек графики из-за того, что эти символы “прилипают” друг к другу, использование “звездочек” дает некрасивую картинку
- никакой защиты от некорректных данных в функции нет – можно при желании доработать
ВАЖНО: если WordPress что-то испортил в коде на этой странице – пишите через обратную связь (или site_post@bk.ru), вышлю файл PHP.
Можно, например, использовать для визуализации результатов логов по месяцам

Как собрать информацию из лога по месяцам – читаем статью ниже
Алгоритм суммы одинаковых элементов массива
Вырезаем первые 7 символов из лога (как раз год-месяц) и считаем элементы по изменению этого поля. Никаких сложных формул по работе с датами.