使用 ggplot 自定义气泡图图例
Posted
技术标签:
【中文标题】使用 ggplot 自定义气泡图图例【英文标题】:Custom legend for bubble plot using ggplot 【发布时间】:2018-09-15 23:23:53 【问题描述】:我有一个数据框,其中包含具有模拟值和观察值的空间变量。
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))
上述代码的输出在图像中。我想在图中显示的是完美完成的模拟数据和观察数据之间的差异。现在,我想为两个变量 sim
和 obs
显示两个不同的图例,它们分别是红色和蓝色的图例。此外,我想在图例中显示变量的大小,但不是以不同大小的气泡,而是以某种不同的方式。类似于给定的here。有人可以帮助我实现这一目标吗?
【问题讨论】:
您可以有一个颜色图例和一个尺寸图例。您不能轻易拥有两个尺寸图例(每种颜色一个)。 另外,i)你不能有两个坐标系,ii)geom_point
中的group
没有做任何事情,iii)你可能想按区域缩放大小(@987654330 @)
【参考方案1】:
你可以让气泡的大小保持原样吗?
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)
说明
要为组获取不同的颜色,请将obs
和sim
集中到一个列中,并将此列指定为颜色美学。 blue
和 red
是默认颜色 ggplot2
分配给具有两个级别的变量。所以我删除了一个geom_point
,并用你的长格式数据代替了剩余的geom_point
。
【讨论】:
我认为你想避免使用shp
来绘制多边形。你的shp
是geom_poin()
的那个。由于没有多边形数据,我认为你所能做的就是留下一个带有数据点的图形。
感谢您的回答,但我不想在尺寸上妥协。我实际上只想要你答案中的上图例,即 obs 和 sim 的两种颜色。你能告诉我你是怎么得到它的吗?
@Pulsar_534511,我添加了一个解释。这实际上是ggplot2
的默认行为
好吧,我不知道“收集”功能!我现在知道你是怎么得到的了,但这仍然不是我想要的。
@Pulsar_534511,你到底想要什么?您链接中的数字没有为组提供不同的颜色。以上是关于使用 ggplot 自定义气泡图图例的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化气泡图:无填充色的气泡图自定义填充色的气泡图
R语言ggplot2可视化气泡图(Bubble plot)使用geom_smooth函数基于lm方法为每个分组的数据拟合趋势关系曲线自定义数据点的大小色彩添加主标题副标题信息