среда, 30 апреля 2014 г.

Создание диаграммы Ганта в LibreOffice Calc

Диаграмма Ганта является в настоящее время де-факто методом для иллюстрации плана или графика работ. Кроме того, базовые знания, которые дают в университете по построению их в табличных процессорах (Excel или Calc), не всегда позволяют полностью представить себе все возможности и необходимые знания для их использования в реальных условиях. Поэтому я считаю необходимым рассказать про этот вид диаграмм.

Диаграмма Ганта представляет собой линейчатую диаграмму (гистограмму) с осью, настроенной как категории, и временной шкалой. Она довольно естественна и интуитивно понятна. Простейшими её примерами могут быть график уборки общественных площадей в коммунальной квартире или график на сменной работе, а среди наиболее часто используемых примеров — график проекта и распорядок дня. Однако при большом количестве задач (событий) она становится тяжело читаемой — в этом её основной недостаток.
В LibreOffice Calc нет специального типа диаграмм, предназначенного для быстрого построения диаграммы Ганта. Но её можно создать правильным формированием данных в таблице и доведением в редакторе диаграмм. Я хотел бы остановиться на следующих вопросах построения диаграммы Ганта в LibreOffice Calc :
  • Структура таблицы для построения простой диаграммы Ганта;
  • Создание подзадач;
  • Автоматизация учета выполнения задач;
  • Создание последовательности шагов и вех;
  • Настройка цветов;
  • Настойка шкал.
Создание гистограмм я подробно описывал в статье "Создание гистограмм при помощи мастера диаграмм в LibreOffice Calc", поэтому тут я буду останавливаться только на шагах, необходимых для создания этого типа диаграмм.

Построение простой диаграммы Ганта

Для того, чтобы нам было проще ориентироваться в сложных примерах, начнём с простой диаграммы Ганта. Для более удобного построения таблица должна иметь следующую структуру: категории → время начала задачи → продолжительность задачи. Построим диаграмму на основе простого дневного графика в рабочий день. Таблица будет выглядеть так:

Таблица для создания простой диаграммы Ганта в LibreOffice Calc

Для того, чтобы быстро создать такую таблицу, введите число в ячейку B2. Затем в ячейку B3 вставьте формулу =C3+B3, выделите ячейку B3 и за квадратик протяните её до B12. Это позволит вам вводить только продолжительность времени, начало следующей задачи будет указываться автоматически. Затем заполните столбец длительности задач.
Выделите диапазон A3:C12 и запустите мастер диаграмм. На первом шаге нам нужно выбрать тип диаграммы «Линейчатая» и подтип «С накоплением». Второй и третий шаг для нашей диаграммы можно пропустить (я их подробно описывал с статье про гистограммы), а для этой таблицы мастер всё правильно определил. На четвёртом шаге снимаем галочку с «Показать легенду» и заполняем поле «Заголовок». Нажмём кнопку «Готово». Наша диаграмма выглядит пока так:

Заготовка для простой диаграммы Ганта в LibreOffice Calc

Теперь нам нужно настроить диаграмму. Для этого перевернём ось X так, чтобы начало дня было вверху, настроим ось Y, чтобы период времени соответствовал дню и уберём лишние элементы с диаграммы, для её лучшего чтения.
Сразу после создания диаграммы вы находитесь в редакторе диаграмм. Если вы вышли из него, щёлкните по диаграмме правой кнопкой мыши и выберите «Правка», или два раза левой кнопкой мыши по самой диаграмме.
Щелкните на оси X (там, где у нас перечислены задачи) правой кнопкой мыши и выберите в контекстном меню пункт «Формат оси...». На вкладке «Масштабирование» поставьте галочку «В обратном порядке». Нажмите кнопку «Да».

Скриншот окна настройки оси X в LibreOffice Calc

Теперь щёлкните правой кнопкой на оси Y (там где у нас время) и выберите в контекстном меню пункт «Формат оси...». Снимем галочки «Автоматически» для «Максимум», «Минимум» и «Основной интервал». Поставим значения: для «Минимума» начало первой задачи — 06:00:00, для «Максимума» начало первой задачи плюс период всего графика — 30:00:00, для «Основной интервал» удобный интервал для отображения — 02:00:00.

Скриншот окна настройки оси Y в LibreOffice Calc

Перейдём на вкладку «Подписи». На этой вкладке в разделе «Ориентация текста» в поле «Градусов» ведём 90 и нажмём кнопку «Да».

Скриншот окна настройки оси Y в LibreOffice Calc

Следующим шагом нам нужно убрать лишние части лент с диаграммы. Нажмем на синюю часть ленты правой кнопкой мыши и в контекстном меню выберем «Формат рядов данных...». В открывшемся окне на вкладке «Области» в выпадающем меню выберем пункт «Нет». И нажмем кнопку «Да». Снимем выделение с диаграммы. Вот, что получилось.

Простая диаграмма Ганта в LibreOffice Calc

Как видите, повозиться с построением приходится, но не так сильно, как это кажется на первый взгляд.

Диаграмма Ганта с подзадачами

Подзадачи на диаграмме Ганта в LibreOffice Calc, так же как и основные задачи, делаются при помощи форматирования необходимой структуры таблицы. Разберём составление диаграммы с подзадачами на примере плана исследовательского проекта моей жены. Длительность задачи будем задавать в календарных днях. Таблица будет выглядеть так:

Таблица для диаграммы Ганта с подзадачами в LibreOffice Calc

Если говорить про более лёгкое заполнение формулами, то тут не получится сделать как в прошлом примере. Однако формулы использовать предпочтительно по причине того, что вся таблица становится более интерактивной. Вот мой способ использования формул для этого случая:

Формулы в таблице для диаграммы Ганта с подзадачами в LibreOffice Calc

Все шаги по построению будут соответствовать шагам из первого примера, за исключением настройки оси Y. Выделим диапазон A3:D14 и запустим мастер диаграмм. На первом шаге выбираем «Линейчатые» и подтип «С накоплением». Второй и третий шаг можно пропустить для этой таблицы. На четвёртом заполняем поле «Заголовок» и снимаем галочку показать легенду.
Следующее, что мы делаем, настраиваем оси. Для оси X (там где категории): жмем на неё правой клавишей мыши и в контекстном меню выбираем «Формат оси...», на вкладке «Масштабирование» ставим галочку «В обратном порядке», жмем «Да». На оси Y у нас вовсе не даты получились, поэтому повозиться придётся больше. Щёлкаем по ней правой кнопкой мыши и в контекстном меню выбираем «Формат оси...». В открывшемся окне, первое, что делаем, это идём на вкладку «Числа», снимаем галочку «Исходный формат» и выбираем формат даты. Для нашего случая лучше всего подойдёт DD.MM.YY. Нажмем кнопку «Да». Теперь мы должны опять открыть тоже самое окно. Почему? Дело в том, что к сожалению «Минимум» и «Максимум» не реагирует сразу на изменения формата, но после принятия изменений это произойдёт, и мы получим в этих полях человекочитаемые даты, а не соответствие количеству дней прошедших с 31.12.1899. Это неудобство ещё не устранено, к сожалению. Если вы можете прикинуть насколько нужно уменьшить/увеличить число, вы можете сделать всё это за один шаг. И так, нажимаем на оси Y правой кнопкой мыши и в контекстном меню выбираем опять «Формат оси...». На вкладке «Масштабирование» снимаем галочку «Автоматически» с «Минимум», «Максимум» и «Основной интервал» и в поля «Минимум» дату начала нашего проекта — 01.09.2014, в поле «Максимум» вводим дату окончания проекта — 01.06.2015, а в поле «Основной интервал» ставим число через которое у нас будут изображаться линии сетки, для этого проекта логичнее всего поставить 30.
Если вам не нравится расположение осей в виде «Зигзага», это можно поправить на вкладке «Подписи». Функция «Плитка» по умолчанию поворачивает все подписи на 45 градусов. Я поверну на 60 градусов. Это можно сделать, задав число в разделе «Ориентация текста» в поле «Градусы». Более подробные настройки осей мы рассмотрим дальше, пока остановимся на этом.
Осталось только удалить лишние элементы. Нажимаем на первый ряд данных (у меня он выглядит как синие линии) правой кнопкой мыши и выбираем в контекстном меню «Формат рядов данных...». Переходим на вкладку «Области» и в выпадающем меню «Заполнить» выбираем «Нет». Жмем «Да». Получилась вот такая диаграмма.

Диаграмма Ганта с подзадачами в LibreOffice Calc

Автоматизация учета выполнения задач для диаграммы Ганта

Диаграмму Ганта в LibreOffice Calc можно использовать для отображения степени выполнение плана. При этом можно сделать интерактивную диаграмму, чтобы каждый раз не перестраивать её, а просто менять значения в ячейках таблицы. Разберём эту возможность на плане из предыдущего примера. Изменим для этого таблицу следующим образом:

Таблица для автоматизации при помощи диаграммы Ганта с подзадачами в LibreOffice Calc

Столбцы с названием «Вычисляем...» будут у нас в итоге скрыты, они являются служебными, для облегчения расчетов. Столбец «Выполнение» служит для занесения туда процента выполнения задачи. Формулы для столбца «Начало» я приводил в предыдущем примере, тут они в точности такие же. В столбце «Вычисляем выполнение задачи» в ячейку C3 мы вставляем формулу =G3*I3 и протягиваем её до ячейки C14. В поле «Вычисляем ост. длит. задачи» в ячейку D3 вставляем =G3-C3 и протягиваем её до D14 — это рассчитывает время до окончания задачи. Тоже самое делаем для подзадач. В столбец «Вычисляем выполнение подзадачи» в ячейку E3 вставляем формулу =H3*I3 и протягиваем её до ячейки H14. В столбце «Вычисляем ост. длит. подзадачи» в ячейку F3 вставляем формулу =H3-E3 и протягиваем её до F14. В столбце выполнение немного сложнее. Нам нужно, чтобы задача, имеющая подзадачи, вычислялась автоматически. Поэтому в поле задачи, имеющей подзадачи, мы вставляем формулу в которой будем складывать выполнение всех подзадач и делить результат на их количество. Для нашего примера это задачи 2 и 3. В ячейку I4 мы вставляем формулу =(I5+I6)/2, а в ячейку I7 формулу =(I8+I9+I10+I11)/4. И задаём ячейкам I3:I14 формат процентов. Общий вид таблицы с формулами такой:

Формулы в таблице для автоматизации при помощи диаграммы Ганта с подзадачами в LibreOffice Calc

Так как у нас на диаграмме станет много цветов, то для облегчения читаемости лучше создать легенду. Но из-за того, что названия столбцов очень длинные, для легенды лучше создать отдельный диапазон. Мой диапазон выглядит следующим образом:

Дополнительный диапазон для диаграммы Ганта с подзадачами в LibreOffice Calc

В ячейке A16 я напечатал пробел — это маленькая хитрость, чтобы обмануть мастер диаграмм. Если этого не сделать, то в легенде будет отображаться название столбца «Столбец В», в качестве названия прозрачного ряда данных «Начало», которое в легенде нам не нужно. Пробел там тоже будет отображаться, но он не будет виден, а значит, не будет мешать читать диаграмму.
Теперь строим диаграмму Ганта. Выделяем диапазон A3:F14 и запускаем мастер диаграмм. На первом шаге выбираем тип диаграммы «Линейчатая» и подтип «С накоплением». Второй шаг в нашем случае можно пропустить, а на третьем шаге нам нужно в поле «Диапазон для: Названия» каждого ряда данных внести соответствующее значение ячейки с названием: для «Столбец B» - это ячейка с пробелом; для «Столбец C» - «выполнение задачи»; для «Столбец D» - «задача»; для «Столбец E» - «выполнение подзадачи»; для «Столбец F» - «подзадача». Напомню, что сделать это легче используя кнопку для выбора диапазона данных, которая находится рядом с полем «Диапазон для: Названия». На четвёртом шаге как всегда заполняем поле «Заголовок» и, для нашего случая, выставляем значение показать легенду «Снизу».
Теперь нам нужно развернуть ось X и настроить ось Y. Делается это так же, как в прошлом примере. Когда мы будем убирать показ лишних рядов данных, нам нужно на вкладке «Параметры» поставить галочку «Включить значения скрытых ячеек». Это позволит нам скрыть все служебные диапазоны, чтобы они не мешали нам использовать таблицу по предназначению.
Из-за того, что алгоритмы компоновки элементов диаграммы ещё находятся в стадии отработки, нам придётся в диаграмме уточнить место положения и размеры её элементов руками. Для того, чтобы выбрать элемент диаграммы можно пользоваться 2 способами:
  • первый — как я рассказывал раньше, просто щёлкать по нему клавишей мыши, он удобен тем, что вы не отвлекаетесь от работы с диаграммой;
  • второй — выбирать элемент диаграммы в выпадающем меню на панели инструментов, это часто спасает, когда элементы диаграммы очень мелкие.

Скриншот раскрывающегося списка для выбора элементов диаграммы в LibreOffice Calc

Выберем легенду диаграммы и растянем её вправо, ухватив за правый зелёный квадратик, пока вся легенда не выстроится в один ряд. Как только вы это сделаете вид диаграммы сломается, диаграмма наедет на легенду. Это происходит всегда, когда вы переходите от автоматической компоновки к ручной. К сожалению, с этим приходиться пока мериться. Выберите диаграмму и за нижний зелёный квадратик сожмите её немного по вертикали а потом, найдя место где курсор примет вид стрелок, направленных в разные стороны, приподнимите её вверх. Такая ручная компоновка диаграммы нужна не часто, но иногда без неё не обойтись.
Теперь, когда диаграмма готова, можно указывать степень выполнения задач и она автоматически будет отражаться на диаграмме. Я проставил частичное выполнение только некоторых задач, что бы было видно как это выглядит.

Диаграмма Ганта для автоматизации учета выполненных работ в LibreOffice Calc

Цветовое оформление получившейся диаграммы сбивает с толку. Как это поправить рассмотрим в следующем разделе.

Настройка цветов диаграммы Ганта

Цвета по умолчанию в LibreOffice Calc для всех диаграмм выставляются в диалоговом окне Параметров: «Сервис» → «Параметры...» → «Диаграммы» → «Цвета по умолчанию». Но это позволяет выбрать только цвета, для диаграммы Ганта это не лучший вариант. В LibreOffice Calc существует возможность настроить цвета и декоративное отображение в редакторе диаграмм. Делается это в окне настройки «Ряды данных» на вкладке «Области».
Интересным свойством для диаграммы может быть штриховка, делается она на той же вкладке что и выбор цвета. Для того, чтобы задать цвет для фона штриховки нужно поставить галочку «Цвет фона», после этого раскрывающийся список с цветами станет доступным. Внизу окна будет поле с предпросмотром цвета.

Скриншот окна ряды данных в LibreOffice Calc

Если нужно чуть оттенить один элемент от другого при условии, что у вас одинаковые цвета у элементов, можно перейти на вкладку «Прозрачность» и выставить значение прозрачность. Так же как и со вкладкой «Области» будет доступен предпросмотр получившегося цвета.
Я для задач поставил цвет «Диаграмма 4»; для выполненных задач поставил штриховку 45 градусов, фон «Диаграмма 4» и прозрачность 10%; для подзадач «Диаграмма 8»; для выполненных подзадач штриховка 45 градусов и прозрачность 10%. Вот что у меня получилось:

Диаграмма Ганта для автоматизации учета выполненных работ в LibreOffice Calc

Создание последовательности шагов и вех для диаграммы Ганта

Последовательность шагов в LibreOffice Calc для диаграммы Ганта средствами мастера и редактора диаграмм не отобразить. Но задача всё равно посильная. Если нам нужно сделать стрелки, изображающие последовательность шагов, мы можем нарисовать их. Минусом такого способа является то, что если нам придётся менять длительность задачи в таблице, стрелки не будут автоматически сдвигаться за линией в диаграмме Ганта. Каждый раз нам придётся руками доводить вид. Хотя если вы часто пользуетесь данной возможностью, можно сделать макрос, который сам будет настраивать стрелки так, как вам необходимо. Объединить же стрелки и диаграмму в одну сущность, для более лёгкого изменения размеров, перетаскивания или копирования, можно и без макросов. Здесь мы разберём создание необходимых элементов вручную.
Диаграмма по умолчанию вписывается в ширину листа A4 книжной ориентации. Изменить её размер можно несколькими методами:
  • первый, самый простой — это выделить область диаграммы и потянуть за квадратик на её стороне;
  • второй (годится для точной подгонки) — щёлкнуть по области диаграммы правой кнопкой мыши и в контекстном меню выбрать «Положение и размер».
В сущности эти два метода подходят для любого элемента диаграммы, но вторым обычно пользуются только при наложении диаграмм.
Стрелки и вехи можно рисовать по-разному. Рисование довольно муторное занятие, отнимает много времени, особенно когда ты только осваиваешь это. Причина этому, на мой взгляд в том, что сначала не понимаешь, как твой рисунок будет выглядеть на диаграмме, часто приходится перерисовывать. Когда я только начинал пользоваться этой возможностью я использовал меню LibreOffice Calc: «Вставка» → «Объект» → «Объект OLE» и в открывшемся окне выбирал «Рисунок LibreOffice» и создавал новый рисунок. Появляется встроенный документ и в нём можно рисовать. Потом, когда я осознал, что у меня многие стрелки повторяются из проекта в проект, я решил создавать рисунки в отдельные файлы, и уже этот файл включать в документ. Таким образом, у меня начали накапливаться стрелочки, а скорость создания диаграммы стала увеличиваться.
Для того, чтобы вставить рисунок на лист LibreOffice Calc нужно так же пройти в меню «Вставка» → «Объект» → «Объект OLE».

Скриншот вставки объекта OLE в LibreOffice Calc

В открывшемся окне нужно выбрать «Создать из файла».Оно изменится, теперь можно указать путь к файлу. Если путь длинный или вы не помните точного пути, то можно нажать на кнопку «Поиск», это откроет диалоговое окно выбора файла.

Скриншот вставки объекта OLE из файла в LibreOffice Calc

Я рисую стрелки большими по сетке в LibreOffice Draw, для меня так удобнее. При вставке получается большой рисунок, который можно сжать до необходимых размеров.

Рисунок шага для диаграммы Ганта в LibreOffice Draw

На моём рисунке ширина линии равна 0,2 см, ширина стрелки 1,50 см, а ширина ромба 1,2 см. Лист после рисования нужно настроить, чтобы не вставлялось лишнее пустое пространство, тогда работать будет полегче. Сделать это можно нажав правой кнопкой мыши на поле рисунка и в контекстном меню выбрать «Страница» → «Параметры страницы». В открывшемся окне настроить ширину и высоту формата бумаги.
Когда вы нарисуете вехи и стрелки для шагов и расставите их на свои места, выделите все стрелки с нажатым Shift и в последнюю очередь диаграмму, после этого отпустите Shift и нажмите на диаграмму правой кнопкой мыши. В контекстном меню выберете «Сгруппировать» → «Сгруппировать». После чего диаграмма станет одной сущностью: её можно будет переносить, менять размер и копировать её в другие документы (например, Writer или Draw).

Диаграмма Ганта с шагами и вехами в LibreOffice Calc

Несколько уточнений: если большие элементы вставляются после мелких и их область перекрывает область мелкого элемента, то выделить последний очень тяжело. Можно большой элемент сдвинуть на более задний план нажав на него правой кнопкой мыши и в контекстном меню выбрать «Расположить» → «Переместить назад». Иногда имеет смысл сначала сделать одну группировку, а затем сгруппировать оставшиеся элементы и эту группировку.
Чтобы отредактировать элементы, можно либо разгруппировать (в контекстом меню «Сгруппировать» → «Разгруппировать»), либо войти в группу («Сгруппировать» → «Войти в группу»). После того, как редактирование будет завершено нужно опять сгруппировать элементы, если вы разгруппировали их, или выйти из группы, если вы вошли в неё.
Если вы хотите сделать вехи в стиле MS Project, то в таблице нужно оставить пустые строки на их месте, которые можно будет скрыть после создания диаграммы, предварительно включив значения скрытых ячеек.


Настройки шкал на диаграмме Ганта

Настройка временной шкалы на диаграмме Ганта в LibreOffice Calc является одной из самых трудоёмких задач. Иногда, действительно сложно сделать необходимое отображение. Например, если ваш проект длиться полгода, то разделить шкалу ровно по месяцам без написания макросов вряд ли удастся. Другой пример, многоуровневая ось Y создается наслоением нескольких диаграмм, что требует много времени и делает невозможным автоматическую подстройку диаграммы при изменении входных данных. Однако, задать неделю, квартал или даже миллисекунду (хотя такого формата в LibreOffice Calc нет) достаточно просто, нужно только отформатировать вид значений на вкладке «Числа» оси Y. В официальной вики есть прекрасная статья на этот счет (Коды числовых форматов в LibreOffice). Наложению диаграмм и макросам я посвящу отдельные статьи, здесь же мы займёмся настройкой оси X.
Первое, что хочется сделать на предыдущих диаграммах — это выровнять названия задач и подзадач по левому краю, сделать это можно используя моноширинный шрифт и пробелы. Чтобы не заниматься тупой работой, отсчитывая пробелы, и сохранить возможность автоматической подстройки диаграммы при ее изменении, стоит использовать формулу. Разберём это на предыдущем примере. Добавим в таблицу два столбца. В первом будем считать длину названия задачи/подзадачи, а во втором добивать название пробелами до длины максимально длинной строки. Таблица примет следующий вид:

Таблица для выравнивания по левому краю для диаграмма Ганта в LibreOffice Calc

В ячейку C3 мы вставляем формулу =LEN(A3) и протягиваем её до С14, а в ячейку D3 вставляем формулу =CONCATENATE(A3;REPT(" "; MAX($B$3:$B$14)-B3)) и протягиваем её до D14. Функция LEN() просто подсчитывает количество знаков в строке, а функция MAX() находит максимальное значение в заданном массиве значений. Обратите внимание, что массив закреплён знаками $, иначе он у нас выйдет за пределы нужного диапазона. Функция REPT() повторяет знак заданное количество раз, для нашего примера равное длине самой длинной строки за вычетом длины текущей строки. А функция CONCATENATE() объединяет строки, в нашем случае это название задачи/подзадачи и строка с пробелами. В итоге мы получаем строки, содержащие равное количество знаков. Для того, чтобы подзадачи немного отстояли от левого края, просто добавим пробел перед текстом в столбце А, так будет легче восприниматься. Теперь, если мы решим изменить название одной из задач/подзадач то в столбце C у нас всё автоматически пересчитается.
Следующим шагом мы строим саму диаграмму. Для построения диаграммы для данной таблицы следует использовать диапазон C3:H14. Все шаги будут соответствовать примеру «Автоматизация учета выполнения задач при помощи диаграммы Ганта в Calc». За одним маленьким исключением, нам нужно везде настроить шрифты. На мой взгляд, самыми приятными шрифтами являются DejaVu Sans Mono. Поэтому я их выбрал для отображения заголовка и оси X. Для оси Y я выбрал DejaVu Sans он похож на первый, но не моноширинный, его я выбрал по причине компактности. Вы можете выбрать свои шрифты, единственное, нужно помнить, что для этой цели для оси X шрифт должен быть моноширинным, иначе ничего не получится.
Для открытия диалога настройки шрифтов нужно нажать на необходимом элементе диаграммы правой кнопкой мыши и выбрать в контекстном меню пункт формат элемента. В открывшемся окне нам необходима вкладка «Шрифт», в которой можно выбрать шрифт, указать его размер и свойства.
Я добавил стрелки для шагов и вехи на диаграмму, чтобы показать всю картину целиком. Вот, что в итоге получилось:

Окончательный вид диаграммы Ганта в LibreOffice Calc

Дополнительная литература и источники