Один ggplot с несколькими наборами данных - PullRequest
2 голосов
/ 28 октября 2019

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

dta1 = data.frame(storename = c(letters[1:5]),
                      storesize = c("small","small","medium","large","large"),
                      lon = c(10,11.2,15,19,22),
                      lat = c(5,5.8,5.6,6.1,3.4))
    dta2 = data.frame(population = sample(100,100,replace = T),
                      lon = runif(100,10,22),
                      lat = runif(100,3.5,6))


Вот пример кода для графика. В моем реальном наборе данных у меня есть ggmap(map) вместо ggplot(). Почему приведенный ниже код не работает?

ggplot() + geom_point(data=dta1,
                      aes(x=lon, y=lat,size = storesize), shape = 23,fill="blue") + 
  scale_size_manual(values = c(1,2,3)) +
  geom_point(data=dta2,
             aes(x=lon, y=lat,size = population), shape = 21,fill="orange")

Если я запускаю такие по отдельности, это работает

ggplot() + geom_point(data=dta1,
                      aes(x=lon, y=lat,size = storesize), shape = 23,fill="blue") + 
  scale_size_manual(values = c(1,2,3))

ggplot() +  geom_point(data=dta2,
             aes(x=lon, y=lat,size = population), shape = 21,fill="orange")

Я хотел бы иметь один сюжет с двумя отдельными легендами в качестве каждого отдельного сюжеташоу.

Кроме того, если мне нужно указать еще одно конкретное место другой формы (скажем, shape = 11), как мне это сделать?

1 Ответ

3 голосов
/ 28 октября 2019

Решение описывается здесь и здесь .
Установите ggnewscale, а затем добавьте новую шкалу, используя new_scale:

library(ggplot2)
library(ggnewscale)

dta1 = data.frame(storename = c(letters[1:5]),
                      storesize = c("small","small","medium","large","large"),
                      lon = c(10,11.2,15,19,22),
                      lat = c(5,5.8,5.6,6.1,3.4))
dta2 = data.frame(population = sample(100,100,replace = T),
                      lon = runif(100,10,22),
                      lat = runif(100,3.5,6))

ggplot() + 
geom_point(data=dta1,  aes(x=lon, y=lat,size=storesize), shape=23, fill="blue") + 
scale_size_manual(values = c(1,2,3)) +
new_scale("size") +
geom_point(data=dta2, aes(x=lon, y=lat, size=population), shape=21, fill="orange")

enter image description here

...