2014-02-18 4 views
0

Мне кажется, что я задаю совершенно глупый вопрос, но я не могу заставить ggplot показать легенду о цветах линий.Добавление легенды (ggplot) не работает

Дело в том, что у меня есть два кадра данных с теми же данными, только первый data.frame представляет новые данные (плюс дополнительные номера), а второй представляет старые данные. Я пытаюсь сравнить новые и старые данные, чтобы понять, что я должен видеть легендой. Я попытался использовать scale_colour_manual, но он все равно не появляется.

Я прочитал несколько различных ответов на похожие вопросы, и они не работали или не привели к лучшему. Ниже приведен простой пример моей проблемы:

rm(list = ls()) 
library(ggplot2) 

xnew<-3:10 
y<-5:12 
xold<-4:11 
years<-2000:2007 
xfact<-rep("x", times=8) 
yfact<-rep("y", times=8) 

Newdata<-data.frame(indicator=c(xfact,yfact),Years=c(years,years), data=c(xnew,y)) 
Olddata<-data.frame(indicator=xfact,Years=c(years), data=xold) 

graph<-ggplot(mapping=aes(Years, data, group=1)) + 
geom_line(,Newdata[Newdata=="x",], size=1.5, colour="lightblue")+ 
geom_line(,Olddata[Olddata=="x",], size=1.5, colour="orange")+ 
ggtitle("OLD vs NEW")+ 
scale_colour_manual(name="Legend", values=c("New"="lightblue", "Old"="orange")) 

результат без легенды.

Благодарим за помощь, которую я уже нашел на этом сайте, и заблаговременно за помощь в решении этой проблемы.

ответ

0

Легенды создаются в ggplot путем сопоставления эстетики с одной переменной. Ваша ошибка в том, что вы пытаетесь установить цвета вручную на каждом уровне.

Newdata$type <- "New" 
Olddata$type <- "Old" 

all_data <- rbind(Newdata,Olddata) 

ggplot(data = all_data[all_data$indicator == 'x',],aes(x = Years,y = data,colour = type)) + 
    geom_line() + 
    ggtitle("OLD vs NEW") + 
    scale_colour_manual(name="Legend", values=c("New"="lightblue", "Old"="orange")) 

Есть бесчисленные примеры, иллюстрирующие эту основную технику в ggplot here.

Смежные вопросы