Różne legendy w tej samej legendzie w ggplot2

Powiedzmy, że nie potrzebuję „właściwego” odwzorowania zmiennych, ale nadal chciałbym mieć klucze legendy, aby pomóc w zrozumieniu wykresu. Moje rzeczywiste dane są podobne do następujących df

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

library(ggplot2)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))

Zasadniczo chciałbym klucz legendy w stosunku dopoints być ... tylko punktem, bez linii pośrodku. Dzięki temu zbliżyłem się do tego:

library(reshape2)

df <- melt(df, id.vars="id")

ggplot() +
  geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) +
  geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

ale definiuje dwie odrębne legendy. Naprawienie drugiego kodu (i konieczność zmiany kształtu moich danych) też byłoby w porządku, ale wolałbym, aby jakiś sposób (jeśli w ogóle) ręcznie zmieniał dowolny klucz legendy (i nadal korzystał z pierwszego zatwierdzenia). Dzięki!

EDYTOWAĆ :

dzięki @alexwhan odświeżyłeś moją pamięć o mapowaniu zmiennych. Jednak najłatwiejszym sposobem, jaki do tej pory udało mi się uzyskać, jest nadal (bardzo zły hack!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, shape = "points")) +
  theme(legend.title=element_blank())

który ukrywa tytuł dwóchróżne legendy.

Inne pomysły więcej niż mile widziane !!!

questionAnswers(2)

yourAnswerToTheQuestion