любой способ аннотировать несколько ящиков с подсчетом статистики c в ggplot? - PullRequest
1 голос
/ 26 марта 2020

Я хочу добавить статистику подсчета для нескольких ящиков для нескольких столбцов с ggplot2, я пытался использовать tally из dplyr, но статистика подсчета неверна. Как я могу сделать это правильно? Любая быстрая идея сделать это?

воспроизводимые данные и моя попытка :

вот воспроизводимые данные и моя попытка ниже. В основном, я хочу добавить статистику подсчета, такую ​​как tot_#_Tool_A, tot_#_Tool_B, tot_# в каждом подзаговоре. Как я могу сделать это в R? Любая быстрая идея, чтобы это произошло? спасибо

ID <- c("DJ45","DJ46","DJ47","DJ48","DJ49","DJ53","DJ54","DJ55","DJ56","DJ57")
Tool <- c("Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_A", "Tool_B", "Tool_B", "Tool_B", "Tool_B", "Tool_B")
Name <- c("CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP", "CMP")
MS1 <- c(51,55,50,59,50,47,48,42,43,46)
MS2 <- c(13,11,14,11,10,17,18,17,20,21)
MS3 <- c(2,3,2,5,6,4,9,6,4,4)
MS4 <- c(16,13,14,11,16,16,18,16,19,15)
MS5 <- c(3,6,3,6,3,4,4,8,5,4)
MS6 <- c(7,7,5,5,8,9,8,6,6,9)

df <- data.frame(ID,Tool,Name,MS1,MS2,MS3,MS4,MS5,MS6)

моя обновленная попытка :

library(reshape2)
library(dplyr)

df1_long <- melt(df, id.vars=c("ID","Tool"))
df1_long %>% group_by(Tool, variable)%>%
    tally %>% ungroup %>% as.data.frame() %>%
    setNames(c("tool", "cat_vars", "count")) %>%
    {
        bind_rows(., setNames(., c("tool", "cat_vars", "count")))
    } %>% as.data.frame() %>%
    ggplot(aes(x=tool,y=count,fill=tool))+
    geom_boxplot() + labs(title="CMP") +facet_wrap(~variable)

, но я не получил правильный ожидаемый блокпост, где статистика ожидаемого количества не отображалась. Есть идеи сделать эту работу? в чем проблема в моем коде? Какие-нибудь мысли? спасибо

цель :

Я хочу добавить статистику подсчета, такую ​​как tot_#_Tool_A, tot_#_Tool_B, tot_# в каждом подзаговоре. Любая идея?

желаемый вывод :

Я пытаюсь получить сюжет что-то вроде этого поста , тогда как tot_#_Tool_A, tot_#_Tool_B, tot_# следует быть размещены в верхней части каждого участка. Как я могу это сделать? спасибо

1 Ответ

1 голос
/ 27 марта 2020

Я предполагаю, что tot _ # _ Tool_A - это общее значение для A, tot _ # _ Tool_B - общее значение для B, а tot_ # - общий итог. Tally () не работает, потому что он просто подсчитывает количество записей, что не имеет смысла для вас, потому что у вас есть 5 записей на комбинацию.

Итак, сначала мы можем получить количество и общее количество для подкатегории. Теоретически мы можем хранить их в одном фрейме данных, но для аннотации и простого решения давайте оставим их отдельно:

library(tidyr)
library(dplyr)
library(ggplot2)

counts = df %>% 
pivot_longer(MS1:MS6) %>% 
group_by(Tool,name) %>% 
summarize(pos=max(value)+2,value=sum(value))

totalcounts = counts %>% 
group_by(name) %>% 
summarise(pos=max(pos)+5,value=paste("total=",sum(value)))

df %>% pivot_longer(MS1:MS6) %>% 
ggplot(aes(x=Tool,y=value)) + 
geom_boxplot() + facet_wrap(~name) + 
geom_text(data=counts,aes(y=pos,label=value)) +
geom_text(data=totalcounts,aes(x=1.5,y=pos,label=value),col="blue")

enter image description here

В приведенном выше решении я использовал максимум каждой подкатегории, чтобы указать позицию текста, и поместил итог в середину всего этого. Вы можете поиграть с тем, где их расположить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...