Создание и визуализация пользовательских диаграмм и графиков в QGIS при помощи R: различия между версиями
(сохранение прогресса) |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
# Вывести их на карту в качестве элемента условного знака объекта. | # Вывести их на карту в качестве элемента условного знака объекта. | ||
Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала | Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала объясним как визуализировать уже готовые диаграммы. | ||
==Визуализация диаграмм в QGIS== | ==Визуализация диаграмм в QGIS== | ||
Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице | Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице атрибутов к которым они относятся. Например, если у векторного слоя есть атрибут "ID", содержащий значения типа 0, 1, 2..., то назовите соответствующие им диаграммы 0.svg, 1.svg, 2.svg... | ||
Теперь перейдём к редактированию векторного слоя. Создайте текстовый | Теперь перейдём к редактированию векторного слоя. Создайте текстовый атрибут в котором будет храниться путь к диаграммам (убедитесь, что поля будут способны вместить достаточное количество символов). Для заполнения полей атрибута воспользуемся калькулятором полей. Вот это простое выражение позволит справится с задачей: | ||
'путь/к/папке/с/диаграммами/' || "ID" || '.svg' | 'путь/к/папке/с/диаграммами/' || "ID" || '.svg' | ||
Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута "ID" и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные ("); кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg', вместо 'путь/0.svg'). Создание атрибута для сохрания пути и его заполнение можно произвести одновременно - выберите опцию "создать новое поле" в калькуляторе полей. | Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута "ID" и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные ("); кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg', вместо 'путь/0.svg'). Создание атрибута для сохрания пути и его заполнение можно произвести одновременно - выберите опцию "создать новое поле" в калькуляторе полей. | ||
Для того, чтобы отобразить диаграммы в качестве условного знака надо зайти в свойства точечного слоя и во вкладке ''Style'' задать тип символа слоя: SVG-маркер (если у вас | Для того, чтобы отобразить диаграммы в качестве условного знака надо зайти в свойства точечного слоя и во вкладке ''Style'' задать тип символа слоя: SVG-маркер (если у вас полигональный слой, то ''Centroid Fill -> Marker -> SVG-marker''). Справа от адресной строки задания пути к файлу нажмите кнопку Data defined override и выберите ''Field type: sting'' и задайте нужный атрибут, см. скриншот: | ||
[[Файл:Svg from field.png|thumb|center|x450px|Задание SVG-маркера из значения атрибута]] | [[Файл:Svg from field.png|thumb|center|x450px|Задание SVG-маркера из значения атрибута]] | ||
Строка 32: | Строка 32: | ||
==Создание скрипта R для построения диаграмм== | ==Создание скрипта R для построения диаграмм== | ||
Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и | Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и соответствующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты. | ||
Вот какие задачи небходимо решить на этапе создания диаграмм: | Вот какие задачи небходимо решить на этапе создания диаграмм: | ||
* '''Подобрать палитру''' | |||
Для этого как нельзя лучше подходит инструмент для подбора палитры [http://colorbrewer2.org/ Color Brewer]. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение - примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть - можно объединить две "количественные" палитры по 10 | Для этого как нельзя лучше подходит инструмент для подбора палитры [http://colorbrewer2.org/ Color Brewer]. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение - примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть - можно объединить [http://colorbrewer2.org/?type=qualitative&scheme=Paired&n=10 две "количественные" палитры по 10 цветов]: | ||
[[Файл:Color palettes.png|thumb|center|x200px|Две "количественные" палитры]] | [[Файл:Color palettes.png|thumb|center|x200px|Две "количественные" палитры]] | ||
* '''Добавить несуществующие данные''' | |||
Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений (см. код скрипта). | |||
* '''Сделать фон дигаммы прозрачным''' | |||
(Здесь и далее приведены параметры для построения графиков в "ggplot2") | |||
plot.background = element_blank() | |||
* '''Сделать фон области значений диаграммы прозрачным''' | |||
= | panel.background = element_blank() | ||
* '''Удалить сетку области значений диаграммы (опционально)''' | |||
panel.grid = element_blank() | |||
* '''Удалить легенду''' | |||
legend.position = 'none' | |||
* '''Удалить подписи к осям и объектам''' | |||
axis.text.x = element_blank(), | |||
axis.text.y = element_blank() | |||
* '''Обрезать поля диаграммы''' | |||
plot.margin = unit(c(0,0,-0.3,-0.3), 'cm') | |||
* '''Сохранить диаграммы на диск с сохранением прозрачности фона''' | |||
ggsave(file = 'имя_файла_и_путь', plot = p, width = 5, height = 5, units = 'cm', bg = "transparent") | |||
* '''Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм''' | |||
Для этого нужно построить диаграмму такого же типа, как и для объектов слоя, но с легендой, подписями и максимальными значениями данных. | |||
==Скрипт на R для Processing Toolbox== | |||
Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями. | Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями. |
Версия от 13:38, 29 марта 2015
В QGIS есть встроенные инструменты построения графиков. С их помощью вы можете построить гистограммы, круговые диаграммы и текстовые диаграммы. К сожалению, встроенные инструменты обладают рядом недостатков, таких как множественные артифакты при рендеринге, громоздскость при отображении большого количества данных, непривлекательный вид. Создание собственных графиков может решить чать этих проблем. В данной статье показано, как используя R можно создавать пользовательские графики для QGIS.
Идея
Мы можем создать необходимые графики в формате SVG сторонними инструментами и отображать их в качетсве [части] условного знака необходимого объекта. Здесь будет показано применение программной среды R, в частности, пакета "ggplot2".
Смоделируем ситуацию. Предположим, нам надо отобразить на диаграмме некоторые величины, находящиеся в атрибутах векторного слоя. Пусть у нас будет 12 атрибутов с необходимыми значениями, но мы знаем, что в будущем их количество увеличится до 20.
Если мы попытаемся использовать встроенные инструменты, то полученные диаграммы загромоздят значительную область экрана (гистограммы), либо будут практически нечитаемы (текстовые диаграммы). В нашем случае лучше всего подойдут радиальные диаграммы.
Вот так будет выглядеть конечный результат:
Итак, нам нужно решить следующие задачи:
- Создать диаграммы в формате SVG.
- Вывести их на карту в качестве элемента условного знака объекта.
Так как вторая задача проще и, возможно, вы предпочитаете использовать другое ПО для создания диаграмм, то сначала объясним как визуализировать уже готовые диаграммы.
Визуализация диаграмм в QGIS
Здесь всё довольно просто. Поместите все диаграммы в одну папку и дайте им имена, соответствующие уникальным идентификаторам объектов в таблице атрибутов к которым они относятся. Например, если у векторного слоя есть атрибут "ID", содержащий значения типа 0, 1, 2..., то назовите соответствующие им диаграммы 0.svg, 1.svg, 2.svg...
Теперь перейдём к редактированию векторного слоя. Создайте текстовый атрибут в котором будет храниться путь к диаграммам (убедитесь, что поля будут способны вместить достаточное количество символов). Для заполнения полей атрибута воспользуемся калькулятором полей. Вот это простое выражение позволит справится с задачей:
'путь/к/папке/с/диаграммами/' || "ID" || '.svg'
Приведённое выражение создаёт строку текста путём присоединения к пути к папке значения атрибута "ID" и расширения файла. Таким образом, для каждого объекта слоя будет записан путь к файлу с его диаграммой. Обратите внимание, что статические (неизменные) значения заключены в одинарные кавычки ('), а динамические (извлекаемые из соответствующего атрибута слоя) - в двойные ("); кроме того, не забывайте, что последним символом в пути к папке должен быть слеш, в противном случае, полученный путь будет неправильным (например, 'путь0.svg', вместо 'путь/0.svg'). Создание атрибута для сохрания пути и его заполнение можно произвести одновременно - выберите опцию "создать новое поле" в калькуляторе полей.
Для того, чтобы отобразить диаграммы в качестве условного знака надо зайти в свойства точечного слоя и во вкладке Style задать тип символа слоя: SVG-маркер (если у вас полигональный слой, то Centroid Fill -> Marker -> SVG-marker). Справа от адресной строки задания пути к файлу нажмите кнопку Data defined override и выберите Field type: sting и задайте нужный атрибут, см. скриншот:
Обязательно задайте размеры маркера побольше - от 15 мм, а то диаграмма будет неразличима.
Создание скрипта R для построения диаграмм
Это - самая сложная часть. Неискушённому пользователю придётся порядочно покопаться в документации к "ggplot2" и соответствующих примерах, чтобы разобраться, как контролировать различные аспекты визуализации. Не будем вдаваться во все тонкости (читайте мануалы), отметим только основные моменты.
Вот какие задачи небходимо решить на этапе создания диаграмм:
- Подобрать палитру
Для этого как нельзя лучше подходит инструмент для подбора палитры Color Brewer. К сожалению, обеспечить отчётливое восприятие отдельных цветов и оттенков возможно только при довольно ограниченном наборе объектов для раскрашивания. Естественное ограничение - примерно 10 цветов, нам же нужно составить палитру для 20(!). Но выход есть - можно объединить две "количественные" палитры по 10 цветов:
- Добавить несуществующие данные
Это необходимо для того, чтобы внешний облик диаграмм не претерпевал значительных изменений при добавлении новых значений (см. код скрипта).
- Сделать фон дигаммы прозрачным
(Здесь и далее приведены параметры для построения графиков в "ggplot2")
plot.background = element_blank()
- Сделать фон области значений диаграммы прозрачным
panel.background = element_blank()
- Удалить сетку области значений диаграммы (опционально)
panel.grid = element_blank()
- Удалить легенду
legend.position = 'none'
- Удалить подписи к осям и объектам
axis.text.x = element_blank(), axis.text.y = element_blank()
- Обрезать поля диаграммы
plot.margin = unit(c(0,0,-0.3,-0.3), 'cm')
- Сохранить диаграммы на диск с сохранением прозрачности фона
ggsave(file = 'имя_файла_и_путь', plot = p, width = 5, height = 5, units = 'cm', bg = "transparent")
- Создать полноценную диаграмму-легенду для расшифровки созданных диаграмм
Для этого нужно построить диаграмму такого же типа, как и для объектов слоя, но с легендой, подписями и максимальными значениями данных.
Скрипт на R для Processing Toolbox
Ниже приведён код скрипта для запуска из Processing Toolbox, снабжённый необходимыми комментариями.