Подтвердить что ты не робот

Как поместить метки над geom_bar в R с помощью ggplot2

Я бы хотел, чтобы некоторые метки были уложены поверх графика 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 $х)

FALSE  TRUE 
    3     5 

Я хотел бы иметь 3 и 5 поверх двух баров. Еще лучше, если бы у меня были и процентные значения. Например. 3 (37.5%) и 5 (62.5%). Вот так:

Возможно ли это? Если да, то как?

4b9b3361

Ответ 1

Как и во многих задачах в 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 устарел, поэтому мы теперь будем использовать theme и element_blank.

Ответ 2

Для построения текста на 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