在 ggplot 中合并单独的大小和填充图例
Merge separate size and fill legends in ggplot
我正在地图上绘制点数据,想要缩放点大小并填充到另一列。但是,ggplot 会为大小和填充生成两个单独的图例,而我只需要一个。我看过同一个问题的几个答案,例如 一个,但无法理解我做错了什么。我的理解是,如果两种美学都映射到相同的数据,那么应该只有一个图例,对吗?
这里有一些代码可以说明这个问题。非常感谢任何帮助!
lat <- rnorm(10,54,12)
long <- rnorm(10,44,12)
val <- rnorm(10,10,3)
df <- as.data.frame(cbind(long,lat,val))
library(ggplot2)
library(scales)
ggplot() +
geom_point(data=df,
aes(x=lat,y=long,size=val,fill=val),
shape=21, alpha=0.6) +
scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette="RdYlBu") +
theme_minimal()
查看 引用 R-Cookbook:
If you use both colour and shape, they both need to be given scale specifications. Otherwise there will be two two separate legends.
因此我们可以推断它与size
和fill
参数相同。我们需要两个尺度来适应。为此,我们可以在 scale_fill_distiller()
部分再次添加 breaks=pretty_breaks(4)
。然后通过使用guides()
我们就可以实现我们想要的。
set.seed(42) # for sake of reproducibility
lat <- rnorm(10, 54, 12)
long <- rnorm(10, 44, 12)
val <- rnorm(10, 10, 3)
df <- as.data.frame(cbind(long, lat, val))
library(ggplot2)
library(scales)
ggplot() +
geom_point(data=df,
aes(x=lat, y=long, size=val, fill=val),
shape=21, alpha=0.6) +
scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette="RdYlBu", breaks=pretty_breaks(4)) +
guides(fill = guide_legend(), size = guide_legend()) +
theme_minimal()
产生:
我正在地图上绘制点数据,想要缩放点大小并填充到另一列。但是,ggplot 会为大小和填充生成两个单独的图例,而我只需要一个。我看过同一个问题的几个答案,例如
这里有一些代码可以说明这个问题。非常感谢任何帮助!
lat <- rnorm(10,54,12)
long <- rnorm(10,44,12)
val <- rnorm(10,10,3)
df <- as.data.frame(cbind(long,lat,val))
library(ggplot2)
library(scales)
ggplot() +
geom_point(data=df,
aes(x=lat,y=long,size=val,fill=val),
shape=21, alpha=0.6) +
scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette="RdYlBu") +
theme_minimal()
查看
If you use both colour and shape, they both need to be given scale specifications. Otherwise there will be two two separate legends.
因此我们可以推断它与size
和fill
参数相同。我们需要两个尺度来适应。为此,我们可以在 scale_fill_distiller()
部分再次添加 breaks=pretty_breaks(4)
。然后通过使用guides()
我们就可以实现我们想要的。
set.seed(42) # for sake of reproducibility
lat <- rnorm(10, 54, 12)
long <- rnorm(10, 44, 12)
val <- rnorm(10, 10, 3)
df <- as.data.frame(cbind(long, lat, val))
library(ggplot2)
library(scales)
ggplot() +
geom_point(data=df,
aes(x=lat, y=long, size=val, fill=val),
shape=21, alpha=0.6) +
scale_size_continuous(range = c(2, 12), breaks=pretty_breaks(4)) +
scale_fill_distiller(direction = -1, palette="RdYlBu", breaks=pretty_breaks(4)) +
guides(fill = guide_legend(), size = guide_legend()) +
theme_minimal()
产生: