2016-08-11 22 views
5

Mam dane pochodzące z dwóch różnych ramek danych. Próbuję utworzyć legendę dla każdej ramki danych. Wiem, że mogę łączyć ramkę danych i robić to, ale ze względu na moje źródło danych najlepiej jest drukować z dwóch różnych ramek danych.legendy ggplot, gdy fabuła jest zbudowana z dwóch ramek danych

Poniżej znajduje się uproszczony przykład. Podszedłem blisko, ale "główna prognoza" w legendzie ma tylko biały kolor. Chcę pokazać, gdzie "Główna prognoza" jest czerwona na zewnątrz, a biała w środku.

x = seq(1,10, 1) 
y = seq(10,100, 10) 

df = data.frame(x=x, y=y) 
df2 = data.frame(x=5, y=50) 

p = ggplot(data=df) + 
    geom_point(data=df,aes(x=x, y=y, color="Weekly Forecast"), fill="red", size=5, shape=16) + 
    geom_line(data=df,aes(x=x, y=y), color="red", size=1) + 
    geom_point(data=df2, aes(x=x, y=y, color="Main Forecast"), size=2, shape=16) + 
    scale_color_manual("Legend Title", breaks=c("Weekly Forecast", "Main Forecast"), values = c("white","red")) 
p 

Każda pomoc zostanie bardzo doceniona.

+1

Nie wkładać 'data = df'in w' ggplot() 'wezwanie, po prostu zostawić je w geoms – Phil

Odpowiedz

2

Musisz użyć jednego z symboli, który bierze wypełnienie (pch = 21:25). Aby uzyskać legendę, musisz użyć numeru override.aes. Przeniosłem udostępnione dane i aes do polecenia ggplot.

ggplot(data=df, aes(x=x, y=y)) + 
    geom_point(aes(color="Weekly Forecast"), shape=16, size = 5) + 
    geom_line(color="red", size=1) + 
    geom_point(data=df2, aes(color="Main Forecast"), shape=21, fill = "white", size = 5) + 
    scale_color_manual("Legend Title", limits=c("Weekly Forecast", "Main Forecast"), values = c("red","red")) + 
    guides(colour = guide_legend(override.aes = list(pch = c(16, 21), fill = c("red", "white")))) 

Można to również zrobić bez override.aes:

ggplot(data=df, aes(x=x, y=y)) + 
    geom_line(aes(color="Main Forecast"), size=1) + 
    geom_point(aes(color="Weekly Forecast", fill="Weekly Forecast"), shape=21, size = 5) + 
    geom_point(data=df2, aes(color="Main Forecast", fill="Main Forecast"), shape=21, size = 5) + 
    scale_color_manual(name="", values = c("red","red")) + 
    scale_fill_manual(name="", values=c("white","red")) 
Powiązane problemy