2010-09-01 3 views
20

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

Я хотел бы создать штабелированный штрих-график, где каждый бар отражает тип плода, а количество наблюдений отсутствия присутствия в «переменной» укладывается друг на друга. Это относительно легко (см. Код для графика 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)) 

enter image description here

# 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)) 

enter image description here

ответ

24

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

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

Спасибо Ramnath, это именно то, что мне нужно для баров. Однако, когда я это делаю, метки оси y вернутся к шкале от 0 до 1. Я бы хотел, чтобы они были от 0 до 100. Включая y = ..counts .. * 100 или y = ..density .. * 100 в «aes», похоже, не работает. Есть идеи? – Steve

+4

'+ scale_y_continuous (" ", formatter =" percent ")'. Исходный '' '' избавляется от метки count, но вы можете включить любую метку, которую хотите. – James

+0

Большое спасибо Джеймсу, который отлично работает. – Steve

Смежные вопросы