2016-11-15 7 views
5

저는 알파를 결합하여 ggplot2를 채우려고합니다. geom_bar (또는 geom_points, color)를 사용할 때 작동하지만 geom_boxplot을 사용할 때 알파 범례가 작동하지 않습니다.알파와 범례를 ggplot2 boxplots에 채우시겠습니까?

library(data.table) 
library(ggplot2) 
dt = data.table(x = rep(1:5,6), y = rnorm(30), tag1 = rep(c('hey', 'what'), 15), tag2 = rep(c('yeah', 'yeah', 'so', 'so', 'so'), 6)) 

그것은 바 작동 : 상자 그림에 대한

ggplot(dt[, list(y=mean(y)), by=list(x, tag1, tag2)], aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_bar(stat = 'identity', position = 'dodge') 

enter image description here

하지만 - 알파 전설 비어 있습니다.

enter image description here

더 간단한 버전

ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot() 
는 더 채우기 수행 할 수 있습니다 -이/lightgray을 회색으로 바 기본적으로 같은 것, 그리고 화이트/lightwhite에 상자 그림 기본값 :

ggplot(dt[, list(y=mean(y)), by=list(x, tag2)], aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_bar(stat = 'identity') 

enter image description here

ggplot(dt, aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_boxplot() 

enter image description here

하지만이 문제를 해결하는 방법을 잘 모르겠습니다.

답변

3

ggplot이 boxplots의 범례에 실제로 알파 레벨을 제공하지 않는 이유는 확실하지 않지만 override.aes을 사용하여 하드 코드 할 수 있습니다. (편집상의 주 : 나는 박스형 또는 막대 형에 대해 알파 미학이 다소 혼란 스럽다. 투명도와 채우기 색을 구분하는 것은 어렵고, 그레이 스케일 알파 범례는 문제를 악화시킨다. 줄거리)

아래 코드에서 범례의 가시성을 높이기 위해 alpha 범례에서 상자 줄을 제거하고 범례 키 높이를 늘 렸습니다. 나는 또한 group 인수에 대한 필요성을 없애기 위해 미학을 편집했습니다.

enter image description here

ggplot(dt, aes(x=factor(x), y=y, fill=tag1, alpha=tag2)) + 
    geom_boxplot() + 
    scale_alpha_manual(values=c(0.2,0.7)) + 
    guides(alpha=guide_legend(override.aes=list(fill=hcl(c(15,195),100,0,alpha=c(0.2,0.7)), 
               colour=NA))) + 
    theme(legend.key.height=unit(1,"cm")) 
또 다른 옵션은 채우기 및 알파 미학 모두 interaction을 사용하는 것입니다,하지만 그 경우에 어떤 색깔은 포함되지 않습니다 ggplot을 밝혀 :

ggplot(dt, aes(x=factor(x), y=y, alpha=interaction(tag1,tag2)), 
     fill=interaction(tag1,tag2)) + 
    geom_boxplot() + 
    scale_fill_manual(values=rep(hcl(c(15,195),100,65), 2)) + 
    scale_alpha_manual(values=rep(c(0.3, 1), each=2)) + 
    theme(legend.key.height=unit(2,"cm")) 

enter image description here

그럼 대신 채우기 미학에서 모든 작업을 수행 할 수 있지만 색상 사양에 투명도가 포함됩니다. 이 방법은 효과적이지만 다시 한번 투명성과 색상이 시각적 인 인식에 다소 섞여 있기 때문에 4 가지 색상을 사용하는 것이 좋습니다.

ggplot(dt, aes(x=factor(x), y=y, fill=interaction(tag1,tag2,sep="-"))) + 
    geom_boxplot() + 
    scale_fill_manual(values=hcl(c(15,195,15,195),100,65, alpha=c(0.4,0.4,1,1))) + 
    theme(legend.key.height=unit(1,"cm")) + 
    labs(fill="Tag 1 - Tag 2") 

enter image description here

+0

감사합니다! 그것은 bar와 boxplot 사이에 다른 행동이 있다는 것과 이상하게 수동으로 고정되어야한다는 것이 이상하지만, 이것은 확실히 작동합니다! 나는이 예에서 알파가 혼란 스럽다는 것에 동의한다. 내 최종 결과에서, 나는 이론적 인 결과 (투명)와 샘플링 오류 등으로 인해 더 지저분한 결과를 구별하기 위해 알파를 사용하고 있습니다. 그래서 나는 생각합니다 * 더 읽기 쉽습니다. – benjamin