Создание и визуализация пользовательских диаграмм и графиков в QGIS при помощи R: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
(продолжение правок)
(добавление скриншотов)
Строка 8: Строка 8:


Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). В нашем случае лучше всего подойдут радиальные диаграммы.
Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). В нашем случае лучше всего подойдут радиальные диаграммы.
Вот так будет выглядеть конечный результат:
[[Файл:Spider chart grid.png|thumb|center|x350px|Радиальная диаграмма с сеткой]]
[[Файл:Spider chart no grid.png|thumb|center|x350px|Радиальная диаграмма без сетки]]


Итак, нам нужно решить следующие задачи:
Итак, нам нужно решить следующие задачи:
Строка 23: Строка 27:


==Создание скрипта R для построения диаграмм==
==Создание скрипта R для построения диаграмм==
Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и соотвествующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации.
Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и соотвествующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты.


Вот какие задачи небходимо решить на данном этапе:
Вот какие задачи небходимо решить на этапе создания диаграмм:
* Подобрать палитру.
====Подобрать палитру====
* Сделать фон дигаммы прозрачным.
Для этого как нельзя лучше подходит инструмент для подбора палитры [http://colorbrewer2.org/ Color Brewer]. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение - примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть - можно объединить две "количественные"  палитры по 10 цыетов в каждой, таким образом
* Сделать фон области значений диаграммы прозрачным.
[[Файл:Color palettes.png|thumb|center|x200px|Две "количественные" палитры]]
* Удалить сетку области значений диаграммы (опционально).
====Сделать фон дигаммы прозрачным====
* Удалить легенду.
====Сделать фон области значений диаграммы прозрачным====
* Удалить подписи к осям и объектам.
====Удалить сетку области значений диаграммы (опционально)====
* Обрезать поля диаграммы.
====Удалить легенду====
* Добавить несуществующие данные (чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений).
====Удалить подписи к осям и объектам====
* Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм.
====Обрезать поля диаграммы====
====Добавить несуществующие данные====
Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений.
====Сохранить диаграммы на диск с сохранением прозрачности фона====
====Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм====


Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями.
Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями.

Версия от 13:03, 29 марта 2015

Эта страница является черновиком статьи.


В QGIS есть встроенные инструменты построения графиков. С их помощью вы можете построить гистограммы, круговые диаграммы и текстовые диаграммы. К сожалению, встроенные инструменты обладают рядом недостатков, таких как множественные артифакты при рендеринге, громоздскость при отображении большого количества данных, непривлекательный вид. Создание собственных графиков может решить чать этих проблем. В данной статье показано, как используя R можно создавать пользовательские графики для QGIS.

Идея

Мы можем создать необходимые графики в формате SVG сторонними инструментами и отображать их в качетсве [части] условного знака необходимого объекта. Здесь будет показано применение программной среды R, в частности, пакета "ggplot2".

Смоделируем ситуацию. Предположим, нам надо отобразить на диаграмме некоторые величины, находящиеся в атрибутах векторного слоя. Пусть у нас будет 12 атрибутов с необходимыми значениями, но мы знаем, что в будущем их количество увеличится до 20.

Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). В нашем случае лучше всего подойдут радиальные диаграммы.

Вот так будет выглядеть конечный результат:

Радиальная диаграмма с сеткой
Радиальная диаграмма без сетки

Итак, нам нужно решить следующие задачи:

  1. Создать диаграммы в формате SVG.
  2. Вывести их на карту в качестве элемента условного знака объекта.

Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала объяним как визуализировать уже готовые диаграммы.

Визуализация диаграмм в QGIS

Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице аттрибутов к которым они относятся. Например, если у векторного слоя есть атрибут "ID", содержащий значения типа 0, 1, 2..., то назовите соответствующие им диаграммы 0.svg, 1.svg, 2.svg...

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

 'путь/к/папке/с/диаграммами/' || "ID" || '.svg'

Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута "ID" и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные ("); кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg', вместо 'путь/0.svg'). Создание атрибута для сохрания пути и его заполнение можно произвести одновременно - выберите опцию "создать новое поле" в калькуляторе полей.

Создание скрипта R для построения диаграмм

Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и соотвествующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты.

Вот какие задачи небходимо решить на этапе создания диаграмм:

Подобрать палитру

Для этого как нельзя лучше подходит инструмент для подбора палитры Color Brewer. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение - примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть - можно объединить две "количественные" палитры по 10 цыетов в каждой, таким образом

Две "количественные" палитры

Сделать фон дигаммы прозрачным

Сделать фон области значений диаграммы прозрачным

Удалить сетку области значений диаграммы (опционально)

Удалить легенду

Удалить подписи к осям и объектам

Обрезать поля диаграммы

Добавить несуществующие данные

Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений.

Сохранить диаграммы на диск с сохранением прозрачности фона

Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм

Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями.