Добавьте общее количество поверх столбчатой ​​диаграммы с накоплением в R ggplot - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы добавить общее количество наверху сложенного столбчатого графика в дополнение к количеству подсчетов в разных категориях, которые у меня есть.

Вот мой график:

Как добавить метки с количеством наблюдений в stat_summary ggplot? Но дело в том, что мне нужно получить количество строк как «факторов»

Это код для графика выше :

ggplot(my_df, aes(x=percentage_int, fill = score)) + 
  geom_bar(aes(y = (..count..))) +
  geom_text(stat='count', aes(label=..count..),position = position_stack(vjust = 0.5))

И это код, который я попробовал, адаптировав из сообщения выше:

label_df = my_df %>% group_by(percentage_int) %>% summarise(n=n())
    
ggplot(my_df, aes(x=percentage_int, fill = score)) + 
          geom_bar(aes(y = (..count..))) +
          geom_text(stat='count', aes(label=..count..),position = position_stack(vjust = 0.5)) +
          geom_text(data=label_df,aes(fill = score, x = percentage_int, label=n))

Я не совсем уверен, почему он не работает ...

Похоже, я не могу избежать создания дополнительного df для этого ...

Решение со stat_summary тоже подойдет, так как я тоже его пробовал. Спасибо!

вот мой тест данных:

structure(list(percentage_int = structure(c(13L, 17L, 10L, 9L, 
14L, 8L, 19L, 11L, 18L, 12L, 6L, 15L, 4L, 16L, 5L, 2L, 20L, 3L, 
7L, 13L, 17L, 18L, 12L, 4L, 11L, 3L, 14L, 2L, 19L, 15L, 7L, 16L, 
6L, 8L, 5L, 20L, 10L, 9L, 19L, 8L, 9L, 11L, 12L, 20L, 13L, 14L, 
10L, 18L, 15L, 16L, 3L, 5L, 17L, 4L, 2L, 7L, 6L, 17L, 5L, 19L, 
7L, 18L, 9L, 20L, 14L, 16L, 11L, 8L, 3L, 13L, 10L, 6L, 4L, 15L, 
12L, 2L, 16L, 18L, 19L, 14L, 13L, 20L, 7L, 17L, 15L, 2L, 9L, 
5L, 3L, 4L, 12L, 10L, 6L, 11L, 8L, 6L, 19L, 13L, 5L, 12L), .Label = c("0", 
"10", "15", "20", "25", "30", "35", "40", "45", "5", "50", "55", 
"60", "65", "70", "75", "80", "85", "90", "95"), class = "factor"), 
    score = c("Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "0.8 > R score >= 0.7", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "0.8 > R score >= 0.7", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "0.5 > R score >= 0.2", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "0.8 > R score >= 0.7", "Rscore = 0.96", "Rscore = 0.96", 
    "0.8 > R score >= 0.7", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "0.8 > R score >= 0.7", "0.8 > R score >= 0.7", NA, "0.8 > R score >= 0.7", 
    "0.8 > R score >= 0.7", "R score < 0.2", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "0.8 > R score >= 0.7", "R score < 0.2", "Rscore = 0.96", 
    "0.8 > R score >= 0.7", "0.8 > R score >= 0.7", "0.8 > R score >= 0.7", 
    "0.8 > R score >= 0.7", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "0.8 > R score >= 0.7", "Rscore = 0.96", 
    NA, "Rscore = 0.96", "0.8 > R score >= 0.7", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "0.8 > R score >= 0.7", "0.8 > R score >= 0.7", "Rscore = 0.96", 
    "Rscore = 0.96", NA, "Rscore = 0.96", "0.8 > R score >= 0.7", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", "Rscore = 0.96", 
    "0.5 > R score >= 0.2", "Rscore = 0.96", "Rscore = 0.96", 
    "0.9 > R score >= 0.8")), row.names = c("1410", "1411", "1412", 
"1413", "1414", "1415", "1416", "1417", "1418", "1419", "1420", 
"1421", "1422", "1423", "1424", "1425", "1426", "1427", "1428", 
"1448", "1449", "1450", "1451", "1452", "1453", "1454", "1455", 
"1456", "1457", "1458", "1459", "1460", "1461", "1462", "1463", 
"1464", "1465", "1466", "1619", "1620", "1621", "1622", "1623", 
"1624", "1625", "1626", "1627", "1628", "1629", "1630", "1631", 
"1632", "1633", "1634", "1635", "1636", "1637", "1771", "1772", 
"1773", "1774", "1775", "1776", "1777", "1778", "1779", "1780", 
"1781", "1782", "1783", "1784", "1785", "1786", "1787", "1788", 
"1789", "1828", "1829", "1830", "1831", "1832", "1833", "1834", 
"1835", "1836", "1837", "1838", "1839", "1840", "1841", "1842", 
"1843", "1844", "1845", "1846", "1885", "1886", "1887", "1888", 
"1889"), class = "data.frame")

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Без вспомогательного data.frame с использованием stat = 'count' и соответствующей группировки:

   ggplot(my_df, aes(x=percentage_int)) + 
    geom_bar(aes(y = (..count..), fill = score)) +
    geom_text(stat='count', aes(group=score, label=..count..), position = position_stack(vjust = 0.5)) +
    geom_text(stat='count', aes(group=percentage_int, label=..count.., y=..count..))
1 голос
/ 05 августа 2020

Попробуйте следующее:

#Code
label_df = my_df %>% group_by(percentage_int) %>% summarise(n=n())
#Create some vars
label_df$score<-NA
#Plot
ggplot(my_df, aes(x=percentage_int, fill = score)) + 
  geom_bar(aes(y = (..count..))) +
  geom_text(stat='count', aes(label=..count..),position = position_stack(vjust = 0.5)) +
  geom_text(data=label_df,aes(fill = score, x = percentage_int, y=n, label=n),
            position = position_dodge(0.9),vjust=-0.5)

введите описание изображения здесь

...