2017-11-07 5 views
1

일부 geom_point에 대한 범례를 추가해야합니다. geom_line 그래프에 추가하고 있습니다. 예제는 다음과 같습니다.geom_point로 범례 추가하기

require(dplyr) 
require(ggplot2) 
set.seed(1111) 

내 개체

Sum <- sample(1:50, 10) 
year <- c(1990:1999) 
index.one <- sample(0:1, 10,replace=TRUE) 
index.two <- sample(0:1, 10,replace=TRUE) 

df <- data_frame(Sum, year, index.one, index.two) 

그래프

graph <- ggplot(df, aes(x=year,y=Sum))+ geom_line() + 
geom_point(data=df[df$index.one==1,], aes(x=year, y=Sum), colour="red", 
fill="red", shape=22) + 
geom_point(data=df[df$index.two==1,], aes(x=year, y=Sum), colour="blue", 
fill="blue", shape=22) + 
scale_x_continuous(breaks = seq(1990,1999, by=1)) 

graph

나는 그래프의 파란색과 빨간색 점은 범례를 추가해야합니다.

감사합니다.

+0

와 동일한 포인트를 세우고 점은 geom_point'에 aes''내 색상을 설정해야하는 필터 ' – bouncyball

답변

1

각 색상마다 기하 구조를 추가 할 필요가 없습니다. 색깔은 당신의 경우에 변수 index.one (또는 .two이지만 그들은 혼동 스럽습니다)에 연결하는 미학입니다.

geom_line을 추가했기 때문에 예제가 좀 더 까다 롭습니다. 문제 없습니다. geom_point에 미적을 추가하십시오. index.one 숫자이기 때문에

ggplot(df, aes(x=year, y=Sum)) + 
    geom_point(aes(colour=as.factor(index.one))) + geom_line() + 
    scale_colour_manual(values=c(`1`='blue', `0`='red')) 

또한, ggplot2는 연속 변수로 사용하려고합니다,하지만 정말 이산, 따라서 as.factor입니다.

enter image description here

편집 : 난 당신이 단순히 NA에 대응 년 index.one의 값을 대체 1995 년에 지점이없는 것으로 나타났습니다, 그리고 포인트가 그려되지 않습니다. 그것은 다른 변수에서 값을 가져 오기 때문에 라인에 영향을 미치지 않습니다.

+0

그리고 NA 레벨을 전설에서 제외 시키라고 어떻게 제안합니까? –

+0

'scale_colour_manual' 함수에서'na.translate = FALSE' 인수를 사용하십시오. – MrGumble

0

이 긴 데이터 세트를 생성 할 tidyr::gather()를 사용하여, 다음은 값이 1

library(tidyr) 
df1 <- gather(df, index, value, 3:4) 
ggplot(df1, aes(x = year, y = Sum)) + 
    geom_line() + 
    geom_point(data = df1 %>% filter(value == 1), 
      aes(colour = index, fill = index), shape = 22) + 
    scale_x_continuous(breaks = seq(1990,1999, by=1)) + 
    scale_fill_manual(values = c("red", "blue")) + 
    scale_colour_manual(values = c("red", "blue"))