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

Сложенная гистограмма в R (ggplot2) с осью y и барами в процентах от счетчиков

Я новичок в ggplot2 и задаюсь вопросом о создании штабелированного штрихового графика. Я проверил книгу и выделенную веб-страницу, но не могу решить проблему. У меня есть два фактора, один из которых имеет 2 уровня (отсутствие присутствия), остальные 10 уровней. Позволяет называть эти две "переменные" и "фрукты".

Я хотел бы создать график сложенной штриховкой, где каждый бар отражает тип плода, а количество наблюдений отсутствия присутствия в "переменной" укладывается друг на друга. Это относительно легко (см. Код для графика 1 ниже), но мне также хотелось бы, чтобы бары и ось y отображали количество отсчетов отсутствия присутствия в "переменной" в процентах. Другими словами, все бары должны иметь одинаковую высоту (отражающую в общей сложности 100%), а подсчет наблюдений отсутствия присутствия должен быть преобразован в проценты.

Я могу изменить масштаб оси y на процент, используя..count.. * 100/sum (.. count.), но я не могу понять, как преобразовать фактические бары. Я создал еще один сюжет с огранкой (код для сюжета 2 ниже), который достигает того, что я хочу с точки зрения процентов, но я предпочел бы два бара друг на друга. Кто-нибудь имеет представление о том, как достичь этого? Я предоставил фиктивные данные и воспроизводимый пример. Спасибо за любую помощь.

Стив

dat <- data.frame( fruit=c("Apple", "Apple", "Orange", "Orange", "Orange", "Orange",
                   "Orange", "Pear", "Pear", "Pear"), variable=c("Present", "Absent",
                   "Present", "Present", "Present", "Present", "Absent", "Absent",
                   "Absent", "Present") )  

# stacked bar plot  
ggplot(dat, aes(x = fruit, fill = variable) ) +  
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

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

# with faceting  
ggplot(dat, aes(x = variable, fill = variable) ) +   
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +   
    facet_grid(. ~ fruit) +  
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

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

4b9b3361

Ответ 1

Для первого графика просто добавьте position = 'fill' в вашу строку geom_bar!. На самом деле вам не нужно масштабировать счетчики, поскольку ggplot имеет способ сделать это автоматически.

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')