2016-08-24 4 views
1

barchart에 라벨을 추가하려고합니다. 데이터는 prop.table(xtabs()) 함수의 출력이며 함수를 처리하기 위해 래핑되므로 기본 플롯팅으로 제한됩니다. 원래 데이터 요소 즉, 내가 질문에 대한 text() 함수 등, 다음 XL ... 하단에R, 막 대형 차트의 라벨이 잘못된 순서로 표시됩니다.

을 XXL 필요 주문했다 :

  1. 레이블이 올바른 순서로하지 않습니다, 나는에 노력 행렬을 조 변경하면 일부는 정확하고 일부는 올바르지 않습니다.

  2. 기타 : 레이블을 열과 정렬 할 수 없습니다.

 
dataF <- matrix(
    c(0.0287081340, 0.2044657097, 0.6306220096, 0.1259968102, 0.0095693780, 0.0006379585, 0.0087591241, 0.1149635036, 
    0.5737226277, 0.2525547445, 0.0500000000, 0.0000000000, 0.0130584192, 0.0439862543, 0.5374570447, 0.3415807560, 
    0.0628865979, 0.0010309278, 0.0029620853, 0.0112559242, 0.2434834123, 0.4751184834, 0.2606635071, 0.0065165877, 
    0.0007883327, 0.0193141506, 0.3133622389, 0.4355538037, 0.2230981474, 0.0078833268, 0.0079646018, 0.0146017699, 
    0.2641592920, 0.4539823009, 0.2522123894, 0.0070796460, 0.0003047851, 0.0033526364, 0.0850350503, 0.4102407802, 
    0.4775982932, 0.0234684547),nrow=6,ncol=7)
dimnames(dataF) <- list(c("XXL","XL","Large","Medium","Small","X-Small"), c("1","2","3","4","5","6","7"))
xx <- barplot(dataF, col=1:nrow(dataF), xlim=c(0, ncol(dataF) + 5), width = 0.85)
legend("topright", rev(rownames(dataF)), fill = rev(1:nrow(dataF))) text(x = 1:7, y = t(dataF), label = round(t(dataF)*100), pos = 3, cex = 1, col = "black")

답변

0
  1. Num1에의 사이즈가 0.0287이고 사이즈의 Y 위치는 0.0287/2 정도로 XL은 0.2044이고, XL의이 0.0287 + 0.2044/2
  2. X 위치 것은 1하지 : 7. 인수가 width 및/또는 space이 아닌 경우 0.7, 1.9, 3.1 등이됩니다. 나는 그들이 x 좌표를 유지하도록 설정하지 않는 것이 더 좋을 것이라고 생각한다.

여기가 제 예입니다. cuttlefish44 @

### calculatiton of y-position 
library(dplyr); library(reshape2) 
d <- melt(dataF) %>% group_by(Var2) %>% mutate(pos = cumsum(value) - 0.5 * value) 

### draw 
xx <- barplot(dataF, col=1:nrow(dataF), xlim=c(0, 11)) # keep legend space by xlim (11 doesn't mean much) 
legend("topright", rev(rownames(dataF)), fill = rev(1:nrow(dataF))) 

with(subset(d, value > 0.04), # don't write small values 
    text(x = 0.7 + 1.2 * (Var2 - 1), y = pos, label = round(value * 100), cex = 1, col = "black")) 

enter image description here

+0

감사합니다. 하나의 질문 : 값 0.7, 1.9, 3.1 ...은 어디서 오는 것입니까? 그들은 미리 설정된 간격의 일종입니까? –

+0

@ Constantin Mingoulin; 그것들은'barplot()'인수의 기본값 인'width = 1'과'space = 0.2' (par 폭; 절대 값은 1 * 0.2 = 0.2)에서옵니다. 따라서 첫 번째 막대는 왼쪽 = 0.2, 가운데 = 왼쪽 + 0.5, 오른쪽 = 왼쪽 + 1입니다. 다음 막대의 값 = 첫 번째 막대의 + 1.2 등. – cuttlefish44

+0

그리고 나는 한가지 잘못된 것을 말했어. 'xlim'은 관련이 없습니다. 공간을 유지하기 위해'par (mar) '대신에 사용할 수 있습니다 (편집했습니다). – cuttlefish44

관련 문제