R: отображение символов или категорий на панели стека

#r #ggplot2 #geom-bar #geom-text

#r #ggplot2 #геометрическая панель #геометрический текст

Вопрос:

Я пытаюсь добавить категорию и процент к каждому уровню в панели стека, например:

 Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Data      <- data.frame( Category)

p= ggplot(Data,aes(x=factor(""),fill=factor(Category))) 
  geom_bar(position="fill") 
  geom_text(aes(label=scales::percent(..count../sum(..count..))),   stat='count',position=position_fill(vjust=0.5))
 

Это создает этот график:
результат панели стека

Но я пытаюсь получить этот график с помощью этой команды, но мне не удалось

Ожидаемый график Ожидаемый график

 p=ggplot(Data,aes(x=factor(""),fill=factor(Category))) 
  geom_bar(position="fill") 
  geom_text(aes(label=scales::percent(..count../sum(..count..))), stat='count',position=position_fill(vjust=0.5))

  p   geom_text(data=Data, aes(x=factor(""),label = Category),  position=position_fill(vjust=0.5))
 

Ответ №1:

Вы были на пути к получению желаемого текста, я думаю, если вы добавите stat = "count" и vjust немного скорректируете, у вас будет то, что вы хотели.

 library(ggplot2)
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Data      <- data.frame( Category)

ggplot(Data,aes(x=factor(""),fill=factor(Category))) 
  geom_bar(position="fill") 
  geom_text(aes(label=scales::percent(..count../sum(..count..))),   
            stat='count',position=position_fill(vjust=0.5))  
  geom_text(aes(label = Category), fontface = "bold",
            stat = "count", position = position_fill(vjust = 0.25))
 

Создано 2021-01-09 пакетом reprex (версия 0.3.0)

Ответ №2:

Другим вариантом достижения желаемого результата было бы использование ggtext::geom_richtext и немного glue :

 library(ggplot2)

Year      <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data      <- data.frame(Year, Category, Frequency)

my_lab <- function(x, y) {
  glue::glue("{scales::percent(x / sum(x))}<br><br><b>{y}</b>")
}

ggplot(Data,aes(x=factor(""), fill=factor(Category))) 
  geom_bar(position="fill") 
  ggtext::geom_richtext(aes(label = my_lab(..count.., ..fill..)), stat='count', label.color = NA, position=position_fill(vjust=0.5))