2012-03-22 4 views
21

Bill Dunlap의 픽업이 기본 그래픽에서 가장 좋아하는 트릭 중 하나입니다. 술집에 막대 위에 숫자 값 (또는 모든 값)을 배치 할 수 있으므로 (나는 사용하지는 않지만 때때로 사용하지만 좋아합니다). 당신을 제공막대 위에 값에 주석 달기 (ggplot faceted)

mtcars2 <- mtcars[order(-mtcars$mpg), ] 
par(cex.lab=1, cex.axis=.6, 
    mar=c(6.5, 3, 2, 2) + 0.1, xpd=NA) #shrink axis text and increas bot. mar. 

barX <- barplot(mtcars2$mpg,xlab="Cars", main="MPG of Cars", 
    ylab="", names=rownames(mtcars2), mgp=c(5,1,0), 
    ylim=c(0, 35), las=2, col=mtcars2$cyl) 

mtext(side=2, text="MPG", cex=1, padj=-2.5) 
text(cex=.5, x=barX, y=mtcars2$mpg+par("cxy")[2]/2, mtcars2$hp, xpd=TRUE) 

는 :

enter image description here

나는 ggplot의 측면 막대 그래프와 주석의 동일한 종류를 할 수 있어야합니다. 분명히 그 값은 당신이 플롯 할 때 사용하는 두 변수와 동일해야합니다. 따라서 ftable로 얻을 수 있습니다. 나는 ftable 결과를 (0이 아닌 값에 대해) 아래에 가져 가서 각각의 막대 위에 놓고 싶습니다.

library(ggplot2) 
mtcars2 <- data.frame(id=1:nrow(mtcars), mtcars[, c(2, 8:11)]) 
mtcars2[, -1] <- lapply(mtcars2[, -1], as.factor) 

with(mtcars2, ftable(cyl, gear, am)) 

ggplot(mtcars2, aes(x=cyl)) + geom_bar() + 
    facet_grid(gear~am) 

이것은 상당히 어려울 듯하지만 어쩌면 생각보다 쉽습니다. 이 문제에 대해 미리 생각해 주셔서 감사합니다.

+0

관련이 있습니까? http://stackoverflow.com/a/9185168/1036500 – Ben

+0

@ben 솔루션에 익숙해졌지만 이것을 'facet_grid'에 연결할 수 없다고 생각합니다. –

+0

흥미롭게도 이러한 종류의 라벨링은 일부 사람들이 더 혼란스러운 표시이므로 피해야합니다. http://stackoverflow.com/q/6644997/1036500 및 http://stackoverflow.com/a/9318468/1036500 – Ben

답변

23

제로가 아닌 각 막대의 수 (높이)를 원한다고 생각하는 것이 맞습니까? 그렇다면,이 그래프를 생성

ggplot(mtcars2, aes(x=cyl)) + 
    geom_bar() + 
    facet_grid(gear~am) + 
    stat_bin(geom="text", aes(label=..count.., vjust=-1)) 

와 (당신이 보여 그 높은 라벨 얻기 위해 일부 조정을 할 수있다) 것을 얻을 수 있습니다 enter image description here

count 것은 dataframe에 새로운 변수 stat_bin()에 의해 생성되었으므로 참조 할 이유가 있습니다 ..count..