gpt4 book ai didi

r - 如何在不更改其他背景的情况下更改 ggplot 图例中的背景以获得线条美感?

转载 作者:行者123 更新时间:2023-12-03 07:54:42 26 4
gpt4 key购买 nike

我正在使用 ggplot2 中的 sf 制作带有两组线的 map 。一组线条有一列值,我将其与“颜色”美学相匹配。我希望另一组线都是白色的( map 的背景是黑色的)。

我希望图例在黑色背景上显示白线,并在白色背景上显示彩色线。看来element_rect只能进入主题部分,不能进入guides/override.aes。

如何为“lines2”几何图形提供一条穿过黑框的白线,而为“lines1”几何图形提供白色背景?

可重现的代码:

library(sf)
library(geosphere)
library(ggplot2)

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

a<-st_coordinates(st_centroid(nc[1:10,]))
b<-st_coordinates(st_centroid(nc[91:100,]))

c<-st_coordinates(st_centroid(nc[21:30,]))
d<-st_coordinates(st_centroid(nc[81:90,]))

lines1<-gcIntermediate(a,b,sp = TRUE)
lines1<-st_as_sf(lines1)
lines1$col <- rep(c("A","B"),5)
lines2<-gcIntermediate(c,d,sp = TRUE)
lines2<-st_as_sf(lines2)

ggplot()+
geom_sf(data = nc,fill = 'black',color = 'white')+
geom_sf(data = lines1,aes(color = col))+
geom_sf(data = lines2, color = 'white',aes(linetype = "help"))+
theme(legend.key=element_rect(fill="black"))+
scale_color_manual(values = c("darkred","yellow"),
guide = guide_legend(override.aes = list(linewidth = c(4))))

这是我所拥有的:

Current code results

这就是我想要的:

enter image description here

最佳答案

我认为最好的方法是覆盖填充图例(如 here ),但它似乎不适用于 geom_sf。因此,我会更改 key_glyph 函数。

# Here, I determine how the legend is going to be displayed
my_key <- function(data, params, size) {
grid::grobTree(
draw_key_rect(data, list()),
grid::segmentsGrob(0.1, 0.5, 0.9, 0.5),
gp = grid::gpar(
col = data$colour %||% "grey20",
fill = data$fill %||% "white",
lwd = (data$size %||% 0.5) * .pt,
lty = data$linetype %||% 1
)
)
}

ggplot() +
geom_sf(data = nc,
fill = 'black',
color = 'white') +
geom_sf(data = lines1,
aes(color = col))+
geom_sf(data = lines2,
aes(lty = "help"),
key_glyph = my_key, # Here, I used the new key function
fill = "black",
color = 'white') +
scale_color_manual(values = c("darkred","yellow"),
guide = guide_legend(override.aes = list(linewidth = c(4))))

结果,我得到了这个。

enter image description here

关于r - 如何在不更改其他背景的情况下更改 ggplot 图例中的背景以获得线条美感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76319090/

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