2016-08-03 6 views
1

상자 안에 두 개의 다른 색을 가진 상자 그림을 어떻게 만들 수 있는지 궁금합니다. 예를 들어, 내 변수 d는 밑줄을 긋고 있는데 변수 b와 c의 합입니다. 따라서 각 상자 내에서 색상은 변수 b와 c의 비율을 나타낼 수 있습니다. 이것이 이해되기를 바랍니다.R 변수 (상자형 상자)로 인해 상자 안에 색칠 상자가 있음

a<-c("A","A","B","B","B","C","C","C","B","A") 
    b<-c(1,2,3,4,3,4,5,6,3,4) 
    c<-c(5,6,4,5,2,1,2,1,5,8) 
    d<-c(6,8,7,9,5,5,7,7,8,12) 
    df<-data.frame(a,b,c,d) 

    boxplot(d~a) 

이제 I의 비율이 표시되도록 상기 변수 B 및 C에 따라 각각의 박스 착색하고자 :

여기에 내 일례이다.

다음은 Excel로 만든 플롯을 보여주는 그림입니다. example http://www.real-statistics.com/wp-content/uploads/2012/11/box-plot-excel.png

어떻게 해결할 수 있습니까? 감사합니다.

+0

보라색과 녹색의 경계가 * 또한 * 중간의 위치? – tluh

+0

필자의 경우 필연적 인 것은 아니므로 중앙값을 보여주는 추가 라인이 있습니다 – KikiRiki

+1

이것은 IMO를 이해하지 못하게합니다. '? boxplot'과이 플롯과 함께 어떤 데이터가 표시되는지 읽어보십시오. 예'df'에서 boxplot의 범위는 A에서 7에서 10 사이입니다. 'b'와'c'는 무엇이 될까요? – Jimbou

답변

1

당신이 시도 할 수 :

# First the boxplot 
n <- boxplot(d ~ a) 
# check the x values for the boxes, here it is for A 0.6 and 1.4 
axis(1, seq(0, 5, 0.1)) 

# proportions for the b values depended on a 

# the mean values calculated using another approach you mentioned in the comment 
ratio <- aggregate(df[ , -1], list(df$a), mean) 
# get the percentages 
ratio <- ratio$b/ratio$d 

# your approach: 
ratio <- c(by(df, INDICES = df$a, FUN = function(x) mean(x$b/x$d))) 
ratio  
A   B   C 
0.2500000 0.4620040 0.7904762 

# caculate the y values for the rectangles, no matter which mean-calculation method you used 
low <- diff(n$stats[c(2, 4), ])*ratio 
high <- diff(n$stats[c(2, 4),])*(1-ratio) 

# the final plot 
n <- boxplot(d ~ a) 
rect(xleft = c(0.6) + seq_along(n$n)-1, xright = 1.4 + seq_along(n$n)-1, ybottom = n$stats[2, ], ytop = n$stats[2, ]+low, col = rgb(1, 1,0 ,0.4)) 
rect(xleft = c(0.6) + seq_along(n$n)-1, xright = 1.4 + seq_along(n$n)-1, ybottom = n$stats[4, ], ytop = n$stats[4, ]-high, col = rgb(0, 1, 1, 0.4)) 

아이디어는 rect()를 사용하여 상자에 사각형을 그릴 것입니다. 시작과 끝 각각 x와 y 값을 제공해야합니다. axis을 사용하여 연속적인 x 축을 추가하여 boxplot에서 x 값을 쉽게 읽을 수 있습니다. y 값은 d에 비해 bc 비율에 따라 다릅니다. 따라서 aggregate 또는 by을 사용하여 하나의 벡터 (여기 b)의 비율을 계산하고 값을 rect() 내에 생성합니다. 마지막으로 rgb() 함수는 투명도를 위해 알파 매개 변수를 추가하는 색상을 계산합니다.

enter image description here