ggplot2 - facet_wrap 带有单独的图例
ggplot2 - facet_wrap with individual legends
我正在使用 ggplot2
绘制具有相同范围(即相同空间覆盖范围)但显示不同特征的地图。
这是它的样子:
library(raster)
library(reshape2)
library(ggplot2)
# make-up data
r <- raster(system.file("external/test.grd", package="raster"))
s <- stack(r, r**2, r**3, r**4, r**5)
names(s) <- paste0("Field ",seq(1,5))
# convert to data frame
rast.df <- as.data.frame(s, xy=T)
# melt
rast.melt <- melt(rast.df, id.vars = c('x','y'), variable.name="field")
# plot
ggplot() +
geom_raster(data=rast.melt , aes(x=x, y=y, fill=value)) +
facet_wrap(~field) +
scale_fill_continuous(na.value="transparent")
结果图看起来很糟糕,因为所有地图都有一个图例。因此,这些地图根本没有对比度。
如何为上图中的每个方面使用单独的图例?
这是 ggpubr
包中 ggarrange
的一种方法:
library(ggpubr)
ggarrange(plotlist = lapply(split(rast.melt, rast.melt$field),function(x){
ggplot() + geom_raster(data=x , aes(x=x, y=y, fill=value)) +
scale_fill_continuous(na.value="transparent") +
ggtitle(x$field[1])}))
我正在使用 ggplot2
绘制具有相同范围(即相同空间覆盖范围)但显示不同特征的地图。
这是它的样子:
library(raster)
library(reshape2)
library(ggplot2)
# make-up data
r <- raster(system.file("external/test.grd", package="raster"))
s <- stack(r, r**2, r**3, r**4, r**5)
names(s) <- paste0("Field ",seq(1,5))
# convert to data frame
rast.df <- as.data.frame(s, xy=T)
# melt
rast.melt <- melt(rast.df, id.vars = c('x','y'), variable.name="field")
# plot
ggplot() +
geom_raster(data=rast.melt , aes(x=x, y=y, fill=value)) +
facet_wrap(~field) +
scale_fill_continuous(na.value="transparent")
结果图看起来很糟糕,因为所有地图都有一个图例。因此,这些地图根本没有对比度。
如何为上图中的每个方面使用单独的图例?
这是 ggpubr
包中 ggarrange
的一种方法:
library(ggpubr)
ggarrange(plotlist = lapply(split(rast.melt, rast.melt$field),function(x){
ggplot() + geom_raster(data=x , aes(x=x, y=y, fill=value)) +
scale_fill_continuous(na.value="transparent") +
ggtitle(x$field[1])}))