сгруппированный гистограммный график с помощью ggplot2 geom_bar отображает пропорции, которые не учитываются

#r #ggplot2 #geom-bar

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

Вопрос:

Я пытаюсь построить сгруппированный столбчатый график (x, y по другой переменной), но вместо количества я получаю график пропорций (0-1), при этом все столбцы равны 1. Я в замешательстве, потому что код кажется правильным (с использованием идентификатора статистики и уклонения от позиции)

Я пробовал разложить переменные на множители, не работает. Фрейм данных находится в длинной форме.

 ggplot(supra.long, aes(condition, measurement, fill = MODE))  
  geom_bar(position = 'dodge', stat = "identity") 
 

Получил тот же результат, когда я построил эту небольшую часть данных:

  A tibble: 6 x 3

condition measurement MODE 
  <chr>           <dbl> <chr>

INTACT              1 US   
INTACT              0 US   
INTACT              1 US   
FT                  0 MRI  
FT                  1 MRI  
FT                  0 MRI 
 

Я ожидаю график подсчетов по оси y, но все столбцы равны 1 по шкале пропорций.

Комментарии:

1. Я хочу построить количество значений value = 1 для измерения. Я попытался преобразовать в chr, никаких изменений.

2. Я думаю, в этом и заключается проблема. Как он подсчитывает положительные (измерение = 1) значения? Или может быть. Как мне отобразить эти данные? Я полагаю, создайте отдельный набор данных только с положительными значениями.

Ответ №1:

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

 library(dplyr)
condition <- c("INTACT","INTACT","INTACT","FT","FT","FT")
measurement <- c(1,0,1,0,1,0)
MODE <- c("US","US","US","MRI","MRI","MRI")
supra.long <- data.frame(condition, measurement, MODE) %>%
  group_by(condition, MODE) %>%
  summarise(count = sum(measurement))

ggplot(supra.long)  
  geom_bar(aes(x=condition, y=count, fill = MODE), position = 'dodge', stat = "identity") 
 

Или я бы отфильтровал нули и использовал статистику «count».

 supra.long <- data.frame(condition, measurement, MODE) %>% filter(measurement > 0)
ggplot(supra.long)  
  geom_bar(aes(x=condition,fill = MODE), position = 'dodge', stat = "count") 
 

Надеюсь, это поможет.

Комментарии:

1. Спасибо. Кажется, проще просто отфильтровать и получить набор данных с ответами «ДА», которые необходимо учитывать. Затем используйте stat = count