web-dev-qa-db-ja.com

ggplot2でRのgeom_barにラベルを付ける方法

_geom_bar_グラフの上にいくつかのラベルを重ねたいです。以下に例を示します。

_df <- data.frame(x=factor(c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE)))
ggplot(df) + geom_bar(aes(x,fill=x)) + opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),axis.title.x=theme_blank(),legend.title=theme_blank(),axis.title.y=theme_blank())
_

いま

テーブル(df $ x)

_FALSE  TRUE 
    3     5 
_

2つのバーの上部に3と5があります。パーセント値も取得できればさらに良いでしょう。例えば。 3 (37.5%)および5 (62.5%)。そのようです: -
(ソース: skitch.com

これは可能ですか?もしそうなら、どのように?

53
angerman

Ggplotの多くのタスクと同様に、一般的な戦略は、プロットに追加するものをデータフレームに配置して、変数がプロットの変数と美学と一致するようにすることです。たとえば、次のような新しいデータフレームを作成します。

dfTab <- as.data.frame(table(df))
colnames(dfTab)[1] <- "x"
dfTab$lab <- as.character(100 * dfTab$Freq / sum(dfTab$Freq))

x変数がdfの対応する変数と一致するように、など。次に、単にgeom_textを使用してインクルードします:

ggplot(df) + geom_bar(aes(x,fill=x)) + 
    geom_text(data=dfTab,aes(x=x,y=Freq,label=lab),vjust=0) +
    opts(axis.text.x=theme_blank(),axis.ticks=theme_blank(),
        axis.title.x=theme_blank(),legend.title=theme_blank(),
        axis.title.y=theme_blank())

この例では、パーセンテージのみをプロットしますが、次のような方法でカウントを一緒にpasteすることもできます。

dfTab$lab <- paste(dfTab$Freq,paste("(",dfTab$lab,"%)",sep=""),sep=" ")

Ggplot2の現在のバージョンでは、optsは廃止されているため、themeelement_blankを使用することに注意してください。

34
joran

ggplotにテキストをプロットするには、geom_text。しかし、最初にddplyを使用してデータを要約すると便利です

dfl <- ddply(df, .(x), summarize, y=length(x))
str(dfl)

データは事前​​に要約されているため、stat="identity"パラメータからgeom_bar

ggplot(dfl, aes(x, y=y, fill=x)) + geom_bar(stat="identity") +
    geom_text(aes(label=y), vjust=0) +
    opts(axis.text.x=theme_blank(),
        axis.ticks=theme_blank(),
        axis.title.x=theme_blank(),
        legend.title=theme_blank(),
        axis.title.y=theme_blank()
)

enter image description here

46
Andrie