我正试图创建一个Map显示的位置威尔斯的基础上一些定义的类别。我已经将每口井的水位相对于它们的完整记录进行了分类,将水位分为“最高”、“高于正常”、“正常”、“低于正常”、“最低”。使用tmap,我想使用以下颜色显示这些条件中的每一个:“Highest-ever”=深蓝色,“above-normal”=浅蓝色,“normal”=绿色,“below-normal”=黄色,“Lowest-ever”=红色
到目前为止,我已经创建了一个sf文件进行Map
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"))
创建用于Map的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")
在Map上绘制数据
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)
Map产生正确的颜色,但与正确的类别无关。我可以改变颜色的顺序,但Map不会总是包含每个类别,因此颜色将再次被错误地分配(如果这有意义的话)
1条答案
按热度按时间kgsdhlau1#
您可以将
con
-列转换为因子。级别的默认顺序将是字母顺序,这就是您可以分配颜色的方式。如果标高为空,它仍将包含在图例中。(
read_osm()
不适合我)