2016-10-31 7 views
4

아래 설명 된대로 플롯에 사용 된 도형에 범례를 추가하는 데 도움이 필요합니다. 음모는 아래와 같습니다 - 상자 음모, 평균점, 신뢰 구간의 오차 막대.도형을 나타내는 범례 추가

결과 플롯은 다음과 같습니다 - 은 내가 어떻게 red circlesmeangreen error barsconfidence interval를 나타냅니다 말할하도록,이에 범례를 추가하는 방법은 무엇입니까?은 -

필수 범례

Legend

플롯 Box plot with mean & ci

위를 생성하는 데 사용되는 데이터 및 코드를 아래 그림과 같이 참조에 대해서 설명한다.

df <- data.frame(cbind(mtcars[,1], mtcars[,2])) #mtcars[, 1:2] 
colnames(df) <- c("metric", "group") 
df$group <- factor(df$group) 

p1 <- ggplot(data=df, aes(x=group, y=metric)) + 
    geom_boxplot() 

metric_means <- aggregate(df$metric, list(df$group), mean) 
metric_ci_95 <- aggregate(df$metric, list(df$group), function(x){1.96*sd(x)/sqrt(length(x))}) 
metric_mean_ci = data.frame(group=metric_means[,1],mean=metric_means[,2], ci=metric_ci_95[,2]) 

# plot mean 
p1 <- p1 + geom_point(data=metric_means, aes(x=metric_means[,1], y=metric_means[,2]), 
         colour="red", shape=21, size=2) 

#plot confidence interval 
p1 <- p1 + geom_errorbar(data=metric_mean_ci, aes(ymin=mean-ci, ymax=mean+ci, x=group, y=mean), 
         color="green", width=.1) 

p1 

는 원과 오류 막대 모양을 표시하는 통계 요약을 표시 범례를 얻을 수 있도록 위의 코드에 추가 할 필요가 뭐?

+0

'geom_point()'와'geom_errorbar()'함수에서'show.legend = TRUE'를 인자로 추가하면 어떻게 될까요? – Phil

+0

@Phil - 당신이 제안한 것에 대한 전설이 보이지 않습니다. – user3206440

+1

ggplot에서 범례를 얻으려면 값/변수를 'aes'의 미학으로 매핑해야합니다. 'aes '안에'color' 또는'shape' 매개 변수를 옮기면 무언가를 얻을 수 있지만, 원하는 것을 선택하지 않을 가능성이 있습니다. – alistaire

답변

3

정말로 색칠하기를 원하면이 코드를 사용할 수 있습니다. 나는 geom_errorbar 대신 geom_linerange을 사용하여 범례에서 수직선을 얻습니다. 또한 제안 된대로, aes의 색상을 매핑하여 범례를 얻은 다음 override.aes을 사용하여 각 값의 플롯을 제한합니다.

ggplot(data=df, aes(x=group, y=metric)) + 
    geom_boxplot() + 
    geom_point(data=metric_means 
      , aes(x=metric_means[,1] 
        , y=metric_means[,2] 
        , colour = "Mean") 
      , shape=21, size=2) + 
    geom_linerange(data=metric_mean_ci 
       , aes(ymin=mean-ci 
         , ymax=mean+ci 
         , x=group 
         , y=mean 
         , color="95% CI") 
       ) + 
    scale_color_manual(name = "", values = c("green", "red")) + 
    guides(colour = guide_legend(override.aes = list(linetype = c("solid", "blank") 
                , shape = c(NA, 1)))) 

을 제공합니다 :

enter image description here

적게 설정 복잡한 요구 대안은, 특히, 당신에게 몇 가지 기능이 이미 사용하는 것입니다

, stat_summary :

ggplot(data=df 
     , aes(x=group, y=metric)) + 
    geom_boxplot() + 
    stat_summary(
    aes(color = "Mean and 95% CI") 
    , fun.data = mean_cl_normal 
    ) 

부여 :

enter image description here

+0

이것은 꽤 좋습니다. 하나의 질문은, 왜 geom_errorbar 대신에'geom_linerange'를 사용 했는가? - 범례에서'errorbar'를 얻을 수없는 이유는 무엇입니까? – user3206440

+0

"geom_errorbar 대신 geom_linerange를 사용하여 범례에서 수직선을 얻습니다."geom_errorbar는 수직선 대신 수평선을 제공하는데이 유스 케이스에서는 심미적으로 기쁘게 생각하지 않습니다. –

+0

예를 들어'stat_summary'에 대해서는 여기에 표시된 그림과 같은 줄거리를 얻지 못했습니다 - 추가 코드를 여기에 포함시키지 않았습니까? – user3206440