Я пытаюсь изучить остатки моей модели на карте, используя ggplot.

Мои данные выглядят примерно так, как показано ниже.

              LAT      LONG  residuals prevSampling
      2668 42.92890 -73.96417 -0.9456018           no
      2653 43.06538 -77.03785 -0.9178303          yes
      2579 42.45123 -78.86276 -0.9032406           no
      2654 42.88848 -78.64891 -0.8738269          yes
      2652 43.01445 -78.48273 -0.8539124          yes
      2510 42.51378 -78.04134 -0.8493541          yes

Сначала я пытаюсь построить точки по широте и долготе. Я хотел, чтобы размер каждой точки соответствовал величине остатков и двух разных цветов, для «да» и «нет» в prevSampling (т.е. размер точек будет варьироваться для «да» в одном цвете / размер точек будет меняться для «нет» другим цветом).

Сначала я создал базовую карту с помощью этого кода:

 gg1<-ny_base + 
theme_nothing() + 
geom_polygon(data = ny_county, fill = NA, color = "white") + 
geom_polygon(color = "black", fill = NA) 

А потом попытался составить сюжет с помощью этого кода. Я разбиваю свои данные (res2017_occur_loc) на два фрейма данных (res2017_occur_locY и res2017_occur_locN) в зависимости от того, является ли prevSampling «да» или «нет».

 gg1 + 
geom_point(data = res2017_occur_locY, aes(x = LONG, y = LAT, size=res2017_occur_locY$residuals,color = "black", fill = "yellow",), shape = 21, group=FALSE) + 
geom_point(data = res2017_occur_locN, aes(x = LONG, y = LAT,size=res2017_occur_locN$residuals,color="black",fill="red"), shape = 21, group=FALSE) + 
theme(legend.position = c(0, 1),legend.justification = c(0, 1))+
scale_color_manual(values = c("yellow","red")) 

Я разместил вверху карты, чтобы показать проблемы, с которыми я столкнулся.

Он дает мне карту с точками разного размера и разных цветов, но (1) в легенде нет текста рядом с легендой / я не могу понять, как ее пометить (2) есть здесь, чтобы получить представление о величина остатков в легенде?

Огромное спасибо заранее!

Figure 1

1
Tammy 19 Сен 2018 в 16:51

2 ответа

Лучший ответ

Вам не нужно так разделять вещи. Вы можете указать, что использовать в качестве формы и что использовать для заливки. Если prevSampling является фактором, вы можете просто заключить его в factor в aes, иначе он не понадобится (например, fill = factor(prevSampling)). Если вы хотите, чтобы размеры были больше для меньших чисел, т.е. больше для -0,9, просто добавьте scale_size(trans = "reverse) в конец.

df <- structure(list(LAT = c(42.9289, 43.06538, 42.45123, 42.88848, 
43.01445, 42.51378, 43.31254, 42.4399), LONG = c(-73.96417, -77.03785, 
-78.86276, -78.64891, -78.48273, -78.04134, -78.3917, -78.0129
), residuals = c(-0.9456018, -0.9178303, -0.9032406, -0.8738269, 
-0.8539124, -0.8493541, -0.3224, -0.2934), prevSampling = c("no", 
"yes", "no", "yes", "yes", "yes", "no", "no")), class = "data.frame", row.names = c(NA, 
-8L))

library(maps)
usa <- map_data("state")
ny <- subset(usa, region %in% "new york")

p <- ggplot() + geom_polygon(data = ny, aes(x = long, y = lat, group = group), color = "white", fill = "grey10")

p +
 geom_point(data = df, aes(x = LONG, y = LAT, size = residuals, fill = prevSampling), shape = 21, group=FALSE) + 
  theme(legend.position = c(0, 1), legend.justification = c(0, 1)) +
  labs(size = "Residuals", fill = "Previous Sampling")

1
Anonymous coward 19 Сен 2018 в 16:11

Во-первых, вы не должны разделять свои данные, поскольку ggplot может работать с ним как с фактором, выполните следующие действия:

res2017_occur_loc$prevSampling <- as.factor(res2017_occur_loc$prevSampling)

Затем измените код сюжета:

gg1 + geom_point(data = res2017_occur_loc, aes(x = LONG, y = LAT, size=res2017_occur_loc$residuals,colour = res2017_occur_loc$prevSampling), shape = 21, group=FALSE)+ scale_color_manual(values = c("yellow","red")) + theme(legend.position = c(0, 1),legend.justification = c(0, 1)) + labs( colour = 'Prev. Sampling', size= 'Residuals')

Это должно работать. Для дискретных цветов следует использовать факторные переменные, а не разбивать данные. Я надеюсь, что это сработает для вас и поможет.

0
Santiago I. Hurtado 19 Сен 2018 в 14:38