Я пытаюсь создать карту, показывающую расположение колодцев на основе некоторых определенных категорий. Я классифицировал уровень воды в каждой скважине относительно их полной записи, разделив уровни воды на категории «самый высокий за всю историю», «выше нормы», «нормальный», «ниже нормы», «самый низкий за всю историю». Используя tmap, я хотел бы показать каждое из этих условий, используя следующие цвета: «Самый высокий за всю историю» = темно-синий, «выше нормального» = светло-синий, «нормальный» = зеленый, «ниже нормального» = желтый, «Самый низкий -когда-нибудь" = красный
До сих пор я создал файл sf для отображения
Library(tidyverse)
library(sf)
library(spData)
Library(tmap)
Library(tmaptools)
Мои данные
test <- structure(list(well = c(3698L, 3697L, 4702L, 15001L, 1501L, 3737L,
1674L, 5988L, 1475L, 15017L), con = c("N", "B", "H", "B", "L",
"B", "N", "A", "N", "B"), x = c(2834091L, 2838342L, 2802911L,
2845228L, 2834408L, 2834452L, 2838641L, 2834103L, 2803192L, 2929417L
), y = c(6166870L, 6165512L, 6125649L, 6174527L, 6161309L, 6168216L,
6170055L, 6164397L, 6140763L, 6227467L)), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))
Создайте файл sf для отображения
test_sf <-test %>%
st_as_sf(coords = c("x","y"),crs = 27200,agr = "constant")
Получить фоновую карту
HB_map <- nz %>%
filter(Name= = "Hawke's Bay") %>%
read_osm(type = "stamen-terrain")
Нанесение данных на карту
qtm(HB_map)+ #this is part of tmap and used to draw a thematic map plot
tm_shape(nz %>% filter(Name= = "Hawke's Bay"))+ #define data source
tm_borders(col = "grey40", lwd = 2, lty = "solid", alpha = NA)+
tm_shape(test_sf)+
tm_dots("con",palette=c(H='blue',A='cyan',N='green',B='yellow',L='red'),stretch.palette = FALSE,size = 0.4,shape =21)
Карта воспроизводит правильные цвета, но не связана с правильными категориями. Я мог бы изменить порядок цветов, но карта не всегда будет содержать каждую категорию, и поэтому цвета будут снова назначены неправильно (если это имеет смысл).
Вы можете преобразовать свой con
-столбец в фактор. Порядок уровней по умолчанию будет алфавитным, именно так вы можете назначить цвета. Если уровень пуст, он все равно будет включен в легенду.
test_sf$con <- as.factor(test_sf$con)
tm_shape(nz %>% filter(Name= = "Hawke's Bay"))+ #define data source
tm_borders(col = "grey40", lwd = 2, lty = "solid", alpha = NA)+
tm_shape(test_sf[test_sf$con != "H",])+
tm_dots(col = "con", palette=c(A='cyan', B='yellow', H='blue',L='red',N='green'), stretch.palette = FALSE,size = 0.4,shape =21)
(read_osm()
у меня не работает..)
Большое спасибо .. это сработало отлично. Я обновил код, включив в него tmaptools, которые я изначально пропустил — это должно позволить работать read_osm.