跨地图标准化色标
Standardize color scale across maps
我正在尝试创建覆盖植被数据的家庭范围图。我的植被数据是连续的,在 2,000 到 7,500 之间。我想为我的所有地图使用一个标准化的色标。我正在尝试创建自己的颜色渐变。当我尝试将我的色标添加到我的地图中时,出现此错误“错误:手动比例中的值不足。需要 27 个,但只提供了 11 个。”我不确定如何正确分类我的连续值。
colorscale<- c("2000-2500"="yellow","2501-3000"="yellow1","3001-3500"="yellow2","3501-4000"="yellow3","4001-4500"="yellow4","4501-5000"="green","5001-5500"="green1","5501-6000"="green2","6001-6500"="green3","6501-7000"="green4", "7001-7500"="forestgreen")
abplot08<- ggplot() + geom_sf(data=abundant08_poly, aes(fill=EVI))+
scale_fill_manual(values= colorscale)+
geom_sf(data=wet08_sf, aes(color = Group),size=2, fill=NA)+
scale_color_manual(values=c("red","hotpink","green","blue","turquoise"))+
ggtitle("Abundant Season Home Ranges 2008");abplot08
您可以使用 scale_*_steps
函数为 ggplot 创建颜色箱。一种方法是为 colors
和 breaks
参数创建两个向量,并为每个图提供它们。我使用了一些虚拟数据来展示这一点。如果您不想要分类箱,可以改用 scale_fill_gradientn
。
nc <- read_sf(system.file("gpkg/nc.gpkg", package="sf"))
rng <- 2000:7500
nc$randat <- rng[sample.int(length(rng), nrow(nc))]
colors <- c("yellow","yellow1","yellow2","yellow3","yellow4","green","green1","green2","green3","green4", "forestgreen")
breaks <- seq(2000, 7000, by = 500)
ggplot() +
geom_sf(data=nc, aes(fill=randat)) +
scale_fill_stepsn(colors = colors, breaks=breaks)
编辑 如果您想要更美观(传统)的色标,您需要手动对数据进行分类。 cut
函数将根据您设置的中断值创建标签。然后你可以使用它作为填充变量。
# create breaks
breaks <- seq(2000, 7500, by = 500)
labs <- seq(2001, 7001, by = 500)
labs[1] <- labs[1] - 1
# create labels to use as fill variable
labs <- paste(labs, 'to', breaks[2:length(breaks)])
# applies labels to bins based on breaks
nc['cat'] <- cut(nc$randat, breaks=breaks, labels = labs)
ggplot() +
geom_sf(data=nc, aes(fill=cat)) +
scale_fill_manual(values=colors)
我正在尝试创建覆盖植被数据的家庭范围图。我的植被数据是连续的,在 2,000 到 7,500 之间。我想为我的所有地图使用一个标准化的色标。我正在尝试创建自己的颜色渐变。当我尝试将我的色标添加到我的地图中时,出现此错误“错误:手动比例中的值不足。需要 27 个,但只提供了 11 个。”我不确定如何正确分类我的连续值。
colorscale<- c("2000-2500"="yellow","2501-3000"="yellow1","3001-3500"="yellow2","3501-4000"="yellow3","4001-4500"="yellow4","4501-5000"="green","5001-5500"="green1","5501-6000"="green2","6001-6500"="green3","6501-7000"="green4", "7001-7500"="forestgreen")
abplot08<- ggplot() + geom_sf(data=abundant08_poly, aes(fill=EVI))+
scale_fill_manual(values= colorscale)+
geom_sf(data=wet08_sf, aes(color = Group),size=2, fill=NA)+
scale_color_manual(values=c("red","hotpink","green","blue","turquoise"))+
ggtitle("Abundant Season Home Ranges 2008");abplot08
您可以使用 scale_*_steps
函数为 ggplot 创建颜色箱。一种方法是为 colors
和 breaks
参数创建两个向量,并为每个图提供它们。我使用了一些虚拟数据来展示这一点。如果您不想要分类箱,可以改用 scale_fill_gradientn
。
nc <- read_sf(system.file("gpkg/nc.gpkg", package="sf"))
rng <- 2000:7500
nc$randat <- rng[sample.int(length(rng), nrow(nc))]
colors <- c("yellow","yellow1","yellow2","yellow3","yellow4","green","green1","green2","green3","green4", "forestgreen")
breaks <- seq(2000, 7000, by = 500)
ggplot() +
geom_sf(data=nc, aes(fill=randat)) +
scale_fill_stepsn(colors = colors, breaks=breaks)
编辑 如果您想要更美观(传统)的色标,您需要手动对数据进行分类。 cut
函数将根据您设置的中断值创建标签。然后你可以使用它作为填充变量。
# create breaks
breaks <- seq(2000, 7500, by = 500)
labs <- seq(2001, 7001, by = 500)
labs[1] <- labs[1] - 1
# create labels to use as fill variable
labs <- paste(labs, 'to', breaks[2:length(breaks)])
# applies labels to bins based on breaks
nc['cat'] <- cut(nc$randat, breaks=breaks, labels = labs)
ggplot() +
geom_sf(data=nc, aes(fill=cat)) +
scale_fill_manual(values=colors)