gpt4 book ai didi

r - 使用 sf 对象自定义 ggplot2 中的图例

转载 作者:行者123 更新时间:2023-12-04 11:51:10 24 4
gpt4 key购买 nike

我正在使用 sf 绘制(映射)ggplot2 对象。我的理解是,由于版本 2.2.1 ggplot2 包含 geom geom_sf ,用于简单的特征对象。

我可以通过执行以下操作来生成我想要的确切 map :

library(sf)
library(ggplot2)

# some points to start with
a <- st_as_sf(data.frame(lon = c(1,4,6), lat = c(0,0,-3)), coords = c('lon', 'lat'))
b <- st_as_sf(data.frame(lon = c(2.5,4), lat = c(-4.5,-5)), coords = c('lon', 'lat'))

# circles around those points
buf.a <- st_buffer(a, 1)
buf.b <- st_buffer(b, 1)

# colors to mark the points
sol.a = rgb(1,0,0)
sol.b = rgb(0,0,1)

# colors to fill the circles
fil.a = adjustcolor(sol.a, alpha.f = .25)
fil.b = adjustcolor(sol.b, alpha.f = .25)

# the plot I want
g = ggplot() +
geom_sf(data = buf.a, fill = fil.a, color = NA) +
geom_sf(data = buf.b, fill = fil.b, color = NA) +
geom_sf(data = a, color = sol.a, shape = 20, size = 3) +
geom_sf(data = b, color = sol.b, shape = 20, size = 3)
g

产生

enter image description here

这就是我想要的,只是它缺少一个传说。为此,我正在做
cols.fill = c("GROUP A" = fil.a, "GROUP B" = fil.b)
cols.sol = c("GROUP A" = sol.a, "GROUP B" = sol.b)

g = ggplot() +
geom_sf(data = buf.a, color = NA, aes(fill = 'GROUP A')) +
geom_sf(data = buf.b, color = NA, aes(fill = 'GROUP B')) +
geom_sf(data = a, shape = 20, size = 3, aes(color = 'GROUP A')) +
geom_sf(data = b, shape = 20, size = 3, aes(color = 'GROUP B')) +
scale_fill_manual(name = "circles", values = cols.fill) +
scale_color_manual(name = "points", values = cols.sol)
g

这使

enter image description here

那不是我想要的,因为在传说中:
  • 'points' 应该是点(不是正方形);和
  • 'circles' 应该是圆(同样,不是正方形)

  • 如果图例可以尊重我的颜色的透明度(在本例中就是这样做的),那就太好了。

    我试图将上面的最后几行更改为类似
    scale_fill_manual(name = "circles", values = cols.fill,
    guide = guide_legend(override.aes = list(shape = c(19, 19)))) +
    scale_color_manual(name = "points", values = cols.sol,
    guide = guide_legend(override.aes = list(shape = c(20, 20))))

    但这对我的情节没有任何影响。

    想法?

    注意:如果它最终使绘图更简单,我可以更改数据的结构,例如,通过将对象 ab 组合在同一个简单的特征对象中,并添加一个指示组的列(对于 buf.abuf.b 也是如此)。

    最佳答案

    这是我设法达到的程度。

    g = ggplot() +
    geom_sf(data = buf.a, color = NA, aes(fill = 'GROUP A'), show.legend = "point") +
    geom_sf(data = buf.b, color = NA, aes(fill = 'GROUP B'), show.legend = "point") +
    geom_sf(data = a, shape = 20, size = 3, aes(color = 'GROUP A'), show.legend = "point") +
    geom_sf(data = b, shape = 20, size = 3, aes(color = 'GROUP B'), show.legend = "point") +
    scale_color_manual(name = "points", values = cols.sol,
    guide = guide_legend(override.aes = list(shape = c(20, 20)))) +
    scale_fill_manual(name = "circles", values = cols.fill,
    guide = guide_legend(override.aes = list(shape = c(20, 20), color = cols.fill, size = 8)))
    g

    enter image description here

    要摆脱图例符号中的灰色背景,
    g + theme(legend.key = element_rect(fill = "white"))

    enter image description here

    这里唯一的问题是圆圈没有我想要的透明度。这很奇怪。

    关于r - 使用 sf 对象自定义 ggplot2 中的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273286/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com