SF点对象图:固定的边框颜色和不同的背景颜色

时间:2018-08-09 03:08:04

标签: r plot sf

我很难绘制sf点对象。 基本上,我想根据变量显示带有黑色边框和填充颜色的点。 在基准图中,我将用不同的背景颜色来施加边框颜色:

plot(1:3, cex = 3, pch = 21, col = 'red', bg = c('blue', 'green', 'yellow'), lwd = 2)

我使用pch = 21以便用bg颜色填充点,同时使用col = 'red'作为点边界颜色。

使用sf对象,我可以使用col施加边框颜色,但图例消失(根据plot {sf}的文档说明,如果col被传递给了功能不显示图例。

library(sf)
# example
df <- data.frame(est = c('A', 'B', 'C'), 
             long = c(-70, -68, -69), 
             lat = c(-12.2, -12.4, -12), 
             RMSE = c(25, 8, 55)) %>% 
    st_as_sf(coords = c('long', 'lat'), crs = 4326)

# reclassifying the RMSE variable:
df$rmse_cut <- cut(df$RMSE, c(0,15,30,45,60))

# plotting the map
plot(df['rmse_cut'], main = 'RMSE', graticule = TRUE, axes = TRUE, 
bgc = 'gray92', 
pch = 21, lwd = 2, cex = 3,
col = 'black', 
bg = c('blue', 'green', 'yellow'))

但是在没有col的情况下进行绘制:

plot(df['rmse_cut'], main = 'RMSE', graticule = TRUE, axes = TRUE, 
bgc = 'gray92', 
pch = 21, lwd = 2, cex = 3,
bg = c('blue', 'green', 'yellow'))

边框由变量rmse_cut排序,但是背景颜色是固定的。 在使用背景色显示来自rmse_cut变量的不同值时,如何在点边界上使用单一颜色?

2 个答案:

答案 0 :(得分:3)

记住基本图!您需要对调色板进行整理以使其一致,然后调用值引用的调色板:

plotpal <- sf.colors(nlevels(df[['rmse_cut']]),categorical=TRUE)
plot(df['rmse_cut'], main = 'RMSE', graticule = TRUE, axes = TRUE, bgc = 'gray92',
     type="n", pal=plotpal, key.pos=1, reset=FALSE)
plot(df[['geometry']], pch = 21, lwd = 2, cex = 3, bg=plotpal[df[['rmse_cut']]], add=TRUE)

enter image description here

答案 1 :(得分:1)

忘记基础绘图,geom_sf()ggplot2的最新CRAN版本中。

library(ggplot2)

ggplot(df, aes(fill = rmse_cut)) +
  geom_sf(size = 5, color = "black", shape = 21, stroke = 2) +
  coord_sf(ylim = c(-11,-13))

enter image description here

由于您的lat值太小,我手动扩大了比例尺。