#r #ggplot2 #maps
#r #ggplot2 #Карты
Вопрос:
Я пытаюсь создать карты домашнего диапазона поверх данных о растительности. Мои данные о растительности непрерывны и составляют от 2000 до 7500. Я хочу иметь одну стандартизированную цветовую шкалу для всех моих карт. Я пытаюсь создать свой собственный цветовой градиент. Когда я пытаюсь добавить свою цветовую шкалу на свою карту, я получаю эту ошибку «Ошибка: недостаточно значений в ручном масштабе. требуется 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
Ответ №1:
Вы можете создавать цветовые ячейки, используя 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)