使用 ggplot 为气泡图自定义图例

Custom legend for bubble plot using ggplot

我有一个数据框,其中包含一个具有模拟值和观测值的空间变量。

df <- data.frame(sim = sample((20:30),10),
                 obs = sample(25:40,10),
                 long = rnorm(10,10,8),
                 lat = rnorm(10,30,15))

我使用以下代码绘制了空间气泡图。

ggplot() +
geom_polygon(data = shp, aes(x = long, y = lat, group = group),
             col = "black", lwd = 0.8, fill = "slategray1",
             alpha = 0.5) +
coord_cartesian() + 
geom_point(data = df, aes(x = long, y = lat, group = sim, size = sim), col = "red", alpha = 0.5) +
geom_point(data = df, aes(x = long, y = lat, group = obs, size = obs), col = "blue", alpha = 0.5) +
scale_size_continuous(range = c(10,20)) +
coord_map(xlim = c(-1, 22), ylim = c(10, 45))

以上代码的输出结果如图。我想在图中显示的是完美完成的模拟数据和观察数据之间的差异。现在,我想为两个变量 simobs 显示两个不同的图例,分别是红色和蓝色图例。此外,我想在图例中显示变量的大小,但不是作为不同大小的气泡,而是以某种不同的方式。给定的东西 here。有人可以帮助我实现这一目标吗?

您可以让气泡的大小保持原样吗?

    df<-data.frame(sim=sample((20:30),10),obs=sample(25:40,10),long=rnorm(10,10,8),lat=rnorm(10,30,15))
shp <- df %>%
  gather(group, value, -long, -lat)

ggplot()+
  geom_polygon(data = df, aes(x = long, y = lat),col="black",lwd=0.8,fill="slategray1",alpha=0.5)+
  coord_cartesian()+
  geom_point(data=shp,aes(x=long,y=lat,group=group,size=value, fill = group, color = group),alpha=0.5)

说明

要为组获取不同的颜色,请将 obssim 收集到一列中,并将此列指定为颜色美学。 bluered 是默认颜色 ggplot2 分配给具有两个水平的变量。所以我删除了一个 geom_point 并使用你的长格式数据代替剩余的 geom_point.