суббота, 5 июля 2014 г.

Как создать вторичную гистограмму в LibreOffice Calc

Статья рассказывает о способе создания вторичной гистограммы в LibreOffice Calc. Как и все примеры, этот можно перенести на другие приложения пакета. А использование Calc обусловлено лишь возможностью раскрыть алгоритм действий. В статье я предлагаю два способа создания вторичных гистограмм: простое рисование линий и автоматическая их подстройка при помощи диаграммы XY. При этом возможности макросов не будут использоваться, всё будем делать при помощи стандартных возможностей элементов.

Вторичная диаграмма (гистограмма) используется для уточнения данных в мелком сегменте, или для разложения какого-то сегмента на части по другой классификации. К сожалению, в пакете LibreOffice до сих пор нет инструмента автоматического создания этих диаграмм. Поэтому, приходится создавать их из разных объектов, объединяя их в одну группу. Однако, это не значит, что невозможно создать удобную для работы диаграмму. В процессе своей практики я нашёл способ создавать их быстро и качественно. Правда пришлось вспомнить математику школьного уровня. Чтобы не загружать статью математическими разъяснениями, я их упущу здесь, раскрыв в отдельной статье, для тех кому это действительно интересно. Так как я над статьями работаю долго, я прикрепляю файл с примером, чтобы вы могли при желании самостоятельно разобрать структуру формул.
Итак, по порядку что будем разбирать:
  • Вторичная гистограмма методом рисования;
  • Автоматическая настройка линий при создании вторичной гистограммы от основной гистограммы;
  • Автоматическая настройка линий при создании вторичной гистограммы от круговой диаграммы.
Для того, чтобы излишне не отвлекаться на разъяснение построения круговой диаграммы и гистограммы, советую сначала прочитать статьи Построение гистограммы и Построение круговой диаграммы в мастере диаграмм. Если после статей останутся вопросы, не стесняйтесь, задавайте их в комментариях.

Вторичная гистограмма методом рисования

Самый простой способ создать вторичную гистограмму в LibreOffice Calc — это создать первую диаграмму, затем вторую диаграмму, в данном случае гистограмму, и нарисовать соединительные линии. Этот способ хорош, если вы больше никогда не будете изменять эту диаграмму. Он требует минимум знаний и навыков в построении диаграмм в LibreOffice. Я разберу его на не очень красивом примере, чтобы были видны минусы этого способа, а заодно дать вам подсказки, как облегчить себе жизнь в некоторых ситуациях.
Возьмём для примера статистику по использованию операционных систем. Так как мы, в данный момент не делаем исследований, то нас устроит для первичной диаграммы веб-статистика, а для вторичной диаграммы опрос. Таблица будет выглядеть так:

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

Выделим диапазон A3:B8 и запустим мастер диаграмм. На первом шаге выберем тип «Гистограмма» и подтип «Процентная с накоплением». Так как обычно мастер диаграмм предполагает, что будет много столбцов, а нам нужен один, на втором шаге выбираем «Ряды данных в строках». Переходим сразу на четвёртый шаг: заполняем заголовок диаграммы и выбираем в разделе «Показать легенду» «Снизу».
Не выходя из редактора диаграмм, выделяем ось Y и жмём клавишу «Del» на клавиатуре, чтобы удалить её. Убираем горизонтальную сетку — это можно сделать кнопкой на панели инструментов «Горизонтальная сетка основная/доп. и осн./доп». Выделяем «Область построения диаграммы» и сжимаем диаграмму по горизонтали, потянув за правый квадратик. После чего нажмём на области построения правой кнопкой и в контекстном меню выберем «Формат области построения...». На вкладке «Обрамление» в разделе «Свойства линии» «Стиль:» в выпадающем списке выберем «Нет» и подтвердим выбор, нажав кнопку «Да». Серый постамент под диаграммой — это ось X. Выделяем её и жмём клавишу «Del». Перемещаем легенду под диаграмму и, растягивая и сжимая её, придаём ей нужный вид. Если легенда не помещается, сожмите немного «Область построения диаграммы» по вертикали. С этой диаграммой всё. Выглядит она вот так:

Настройка основной диаграммы при построении вторичной гистограммы в LibreOffice Calc

Сделаем вторую диаграмму. Для этого выделим диапазон A10:B17 И запустим мастер диаграмм. Строим мы её также, за исключением того, что нам не нужен заголовок, поэтому мы его не вводим.
После построения в мастере диаграмм, не выходя из редактора, настроим её. Удалим оси, сетку и обрамление области построения, так же, как в предыдущий раз. Теперь нам нужно сделать прозрачной «Область диаграммы». Для этого нажмём на неё правой кнопкой мыши и в контекстном меню выберем «Формат области диаграммы...». На вкладке «Области» в разделе «Заполнить» в выпадающем меню выберем «Нет» и подтвердим свой выбор. Затем выйдем из редактора, щёлкнув мышкой за границами диаграммы, и, выделив диаграмму, сожмём её по горизонтали примерно до пяти сантиметров. Расположим её на фоне первой, выровняв на глаз по правой и верхней границе.

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

Как видите, у нас остались только линии. Для того, чтобы их нарисовать откроем панель рисования (Главное меню → Вид → Панели инструментов → Рисование). На панели инструментов «Рисование» второй элемент слева «Линия». Нажимаем его и проводим прямую от верхнего края голубой области на левой диаграмме к верхнему краю правой. То же самое делаем для нижнего края голубой области левой диаграммы, только ведём линию к нижней части правой. С первого раза, обычно, тяжело нарисовать линию точно. Чтобы поправить расположение конца линии можно увеличить масштаб (нажмите клавишу Ctrl и крутите колёсико вперёд). Нажав на линию правой кнопкой мыши и выбрав в контекстном меню пункт «Линия...», можно настроить её вид. Когда закончим настраивать линии, мы можем сгруппировать все элементы, чтобы было удобно перетаскивать и копировать диаграмму целиком. Для этого выделим все элементы при нажатой кнопке Shift и, нажав правой кнопкой мыши на выделенном, в контекстном меню выберем «Сгруппировать → Сгруппировать».
Я дополнительно перекрасил ряды данных, чтобы диаграмма смотрелась более привлекательно.
В итоге должна получиться подобная диаграмма.

Вторичная диаграмма LibreOffice Calc

Вторичная гистограмма от круговой диаграммы выполняется аналогично.
Как видно, такой способ построения хорош, только если вы точно уверены, что информация ваша не будет меняться. Но если вы консолидируете информацию, то скорее всего постоянно сталкиваетесь с тем, что в последний момент, вдруг кто-нибудь вспомнит что забыл очень важную штуку. И маета с линиями начинается по новой. Чтобы этого избежать, а также для удобства создания шаблонов, я предлагаю иной ход действий.

Автоматическая настройка линий при создании вторичной гистограммы от гистограммы

Для того, чтобы показать автоматическую настройку линий в LibreOffice Calc при создании вторичной гистограммы мы будем использовать первый пример, но немного изменим его, чтобы показать нюансы. Сгруппируем наши значения в таблице не по уменьшению процентов использования, а по группам, причём Mac Os поместим вниз таблицы. Таблица будет выглядеть так:

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

Для линий я предлагаю использовать дополнительно диаграмму XY. Она будет изображать координатную сетку с нулём в верхнем левом углу, то есть по оси X у нас будут положительные числа, а по оси Y только отрицательные. Если нам нужно будет строить сложную диаграмму, то линии сетки диаграммы можно использовать для визуального самоконтроля. Для того, чтобы можно было автоматически рассчитывать положение линий сделаем такую таблицу:

Служебная таблица для построения вторичной гистограммы в LibreOffice Calc

В ячейки столбца «Размер области диаграммы» вносим размер диаграмм. В нашем случае это размеры основной и вторичной диаграммы. «Позиция относительно сетки» это позиция относительно нуля на координатной сетке, это нужно, чтобы привязать диаграммы в формулах. В нашем случае, только G5 (смещение по горизонтали для вторичной гистограммы) отличается от нуля, потому что у нас простой пример. Но если у вас больше диаграмм и сетка значительно больше, то все поля могут быть заполнены значениями. Позиция внутри области диаграммы это смещение области построения по отношению к опорной точке. Я использую опорную точку по умолчанию — это левый верхний угол. С моей точки зрения, это удобно для расчётов. Размер области построения также нужен для привязки к сетке. Все эти данные можно узнать щёлкнув на соответствующий элемент и в контекстном меню выбрав пункт «Положение и размер...».

Скришот окна Положение и размер в LibreOffice Calc

Оставшиеся три столбца будут задавать координаты линий. При этом нужно учитывать, что значения на диаграмме выстраиваются в обратном порядке. Также, если вы используете перемещение рядов данных на третьем шаге мастера диаграммы, то значения для оси Y будут высчитываться по иному, хотя принцип останется тот же. Координаты можно высчитать по следующим формулам:
  • координата X для начала линий (J3) =G3+H3+I3*3/4;
  • координата X для конца линий (J4) =G5+H5+I5*1/4;
  • координата Y для начала верхней линии (K3) =-(SUM(B8)/SUM(B3:B8)*I4+H4+G4);
  • координата Y для начала нижней линии (K4) =-(SUM(B7:B8)/SUM(B2:B8)*I4+H4+G4);
  • координата Y для конца верхней линии (L3) =-(H6+G6);
  • координата Y для конца нижней линии (L4) =-(H6+I6+G6);
Построим теперь диаграммы. Как и в предыдущем случае, первая будет построена на диапазоне A3:B8, а вторая на диапазоне A10:B17. Строятся они так же, как было описано выше, поэтому я не буду останавливаться на этом. Третьей диаграммой у нас будет диаграмма для линий. Для её построения выделим диапазон J3:L4 и запустим мастер диаграмм. На первом шаге выберем тип «Диаграмма XY» и подтип «Только линии». Для нашего случая мы можем перейти сразу на четвёртый шаг, на котором нам нужно снять галочки с «Показать легенду» и в разделе «Отображать сетку» «ось Y». Нажмём кнопку «Готово».
Не выходя из редактора диаграмм, нажимаем правой кнопкой мыши на «Области диаграммы» и в контекстном меню выбираем «Формат области диаграммы...». На вкладке «Области» в разделе «Заполнить» в выпадающем меню выбираем «Нет» и подтверждаем выбор. Затем нажимаем на ось X правой кнопкой мыши и в контекстном меню выбираем «Формат оси..». На вкладке «Масштабирование» выставляем для «Минимум» 0, а для «Максимум» 16. Тоже самое делаем для оси Y, но значения будут -9 и 0 соответственно. Если вы будете делать диаграмму больше, то вам могут понадобиться другие значения. В общем случае, значения должны покрывать всё поле где будут располагаться диаграммы, а единица их равна одному сантиметру. Теперь мы можем удалить оси (выделить ось и нажать «Del»). По умолчанию линии диаграммы толстые и цветные. Для нашего случая, я думаю, нужно их изменить. Нажмём на линию правой кнопкой мыши и в контекстном меню выберем «Формат точек данных...». На вкладке «Линии» укажем необходимый цвет, вид и толщину линии. Теперь нам нужно обесцветить линию, окружающую «область построения». А затем растянуть «область построения» так, чтобы она занимала всю видимую часть диаграммы. Снимем выделение.
Следующим шагом нам нужно совместить диаграммы, при этом чем точнее мы совместим, тем меньше будут погрешности при построении линий. В нашем примере это можно сделать просто. Площадь основной диаграммы и диаграммы с линиями равны, поэтому мы нажимаем на любой из них (ту которую нам удобнее) правой кнопкой мыши и в контекстном меню выбираем пункт «Положение и размер...». Нас интересуют значения полей на вкладке «Положение и размер» в разделе «Положение»: «Положение X» и «Положение Y». Запоминаем их и переносим во вторую диаграмму. Для вторичной гистограммы «Положение Y» равно положению основной, а «Положение X» = «Положение X» основной диаграммы + размер основной диаграммы - ширина вторичной диаграммы. В моём случае получилось 11.
После того, как мы совместили диаграммы, мы можем их сгруппировать. Теперь мы имеем группу диаграмм, которая выглядит так, как нам хотелось:

Вторична гистограмма от гистограммы с автоматической настройкой линий в LibreOffice Calc

Можете попробовать поменять значения в таблице основной диаграммы — линии будут «бегать» за размерами элемента. Если вы будете изменять место положение элементов диаграммы, не забывайте менять соответствующие значения в служебной таблице.
Всё это замечательно, но почему не работает для вторичной гистограммы от круговой диаграммы? При использовании основной круговой диаграммы должны быть другие расчёты для начала координат линий.

Автоматическая настройка линий при создании вторичной гистограммы от круговой диаграммы

Чтобы продемонстрировать автоматическую настройку линий в LibreOffice Calc при использовании основной круговой диаграммы и вторичной гистограммы воспользуемся таблицей из прошлого примера. А служебную модифицируем добавив туда центр окружности, угол поворота, радиус и угол начала и конца элемента.

Служебная таблица для построения вторичной гистограммы в LibreOffice Calc

  • Координату X для центра окружности находим по формуле (J3) =G3+H3+I3/2;
  • Координату Y для центра окружности (J4) =-(G4+H4+I4/2);
  • Радиус равен половине области построения (K3) =I3/2;

Угол поворота по умолчанию равен 90 градусам, его имеет смысл изменить только в том случае, если вы будете поворачивать диаграмму, узнать его можно в поле рядом с циферблатом для поворота диаграммы в параметрах ряда данных;
Углы поворота радиуса, ограничивающие элемент с двух сторон, можно найти следующим способом:
  • Первый угол (M3) =SUM(B3:B7)/SUM(B3:B8)*360+L3;
  • Второй угол (M4) =SUM(B3:B6)/SUM(B3:B8)*360+L3;
Таблица с координатами линий немного отличается, иксы и игреки могут не совпадать для начала линий. Найти их можно следующим образом:
  • X1 для первой линии (P3) =IF(M3>450;G3+J3;J3+K3*COS(RADIANS(M3)));
  • Y1 для первой линии (P4) =IF(M3>450;-(G4+H4);J4+K3*SIN(RADIANS(M3)));
  • X1 для второй линии (P5) =IF(M4<270;G3+J3;J3+K3*COS(RADIANS(M4)));
  • Y2 для второй линии (P6) =IF(M4<270;-(G4+H4+I4);J4+K3*SIN(RADIANS(M4)));
  • X2 для первой линии и X2 для второй линии будут равны.
Заполнив таблицу, мы можем приступать к построениям.
Основная и вторичная диаграммы строятся аналогично предыдущим примерам. С линиями немного сложнее. Выделяем диапазон P3:Q6, запускаем мастер диаграмм и на первом шаге выбираем тип диаграммы «Диаграмма XY» подтип «Только линии». На втором шаге отмечаем, что данные в строках. На третьем мы видим, что мастер определил три ряда данных, поправим его. Удаляем один ряд данных. Для первого ряда данных, для нашего случая, значения диапазона для X равны P3:Q3, а для для Y — P4:Q4. Для второго ряда данных P5:Q5 и P6:Q6 соответственно. На четвёртом шаге нам нужно снять галочку с «Показать легенду» и «Отображать сетку» по оси Y. После чего можно нажать «Готово».
Дальнейшая настройка будет такая же, как описано в предыдущем примере:
  • Нужно задать значения осям X и Y;
  • удалить их;
  • обесцветить область диаграммы;
  • обесцветить рамку области построения;
  • растянуть область построения на всю площадь области диаграммы.
После чего нам нужно совместить диаграммы. Опять же это ничем не отличается от предыдущего случая. Покончив с диаграммами, вносим поправки в значения положения элементов в вспомогательную таблицу при необходимости и объединяем диаграммы в одну группу.
Как и в предыдущих случаях я перекрасил элементы диаграмм для придания привлекательности и повернул точку отсчёта для круговой диаграммы до 30 градусов.
В итоге у меня получилось вот что:

Вторичная гистограмма от круговой диаграммы в LibreOffice Calc

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

Ещё раз даю ссылку на файл с примером.
Напоминаю, что математическую модель привязки объектов диаграммы к сетке объясню в отдельном уроке.
Если у вас остались вопросы, или есть предложения, вы можете их озвучить в комментариях.

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