2012-03-22 3 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でファセットバープロットと注釈と同じ種類の操作を行うことができるようにしたいです。明らかに値は、あなたがプロットする面倒な変数と同じ2つの変数でなければならないので、あなたはそれらをftableで得ることができます。私は以下のftableの結果を(ゼロ以外の値について)取って、それぞれのバーの上に置きたいと思います。

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は、データフレームの新しい変数でありますstat_bin()によって作成されたため、参照する必要があります..count..

関連する問題