2016-02-12 2 views
1

Я работаю с R около 2 лет, и я не знаю, что здесь не так. У меня есть этот фрейм данных, который выглядит так.ggplot2 barplot не добавляет правильно

 incomeGroup diabetic percent 
     (fctr)  (fctr)  (dbl) 
1  <10,000 NonDiabetic 0.87689665 
2  >75,000 NonDiabetic 0.93173965 
3 10,000-15,000 NonDiabetic 0.80568579 
4 15,000-20,000 NonDiabetic 0.84773930 
5 20,000-25,000 NonDiabetic 0.83956823 
6 25,000-35,000 NonDiabetic 0.86481373 
7 35,000-50,000 NonDiabetic 0.86237913 
8 50,000-75,000 NonDiabetic 0.91666293 
9  <10,000 Diabetic 0.12310335 
10  >75,000 Diabetic 0.06826035 
11 10,000-15,000 Diabetic 0.19431421 
12 15,000-20,000 Diabetic 0.15226070 
13 20,000-25,000 Diabetic 0.16043177 
14 25,000-35,000 Diabetic 0.13518627 
15 35,000-50,000 Diabetic 0.13762087 
16 50,000-75,000 Diabetic 0.08333707 

Затем я использую ggplot2, чтобы сделать график, используя следующий код:

ggplot(income3, aes(x = incomeGroup, y = percent, fill = diabetic)) + 
    geom_bar(data=subset(income3, diabetic == "NonDiabetic"), stat = "identity") + 
    geom_bar(data=subset(income3, diabetic == "Diabetic"), stat = "identity") 

По какой-то причине, выход выключен. Я получаю график, который выглядит следующим образом:

Это не имеет никакого смысла, так как я суммируется все числа и все они равны 1. Я не знаю, если это проблема с ggplot или если Я делаю что-то неправильно. Ниже приведен код, который будет воссоздавать данные, которые я использую.

incomeGroup <- c("<10,000", ">75,000", "10,000-15,000", "15,000-20,000", "20,000-25,000", "25,000-35,000", "35,000-50,000", "50,000-75,000", "<10,000", ">75,000", "10,000-15,000", "15,000-20,000", "20,000-25,000", "25,000-35,000", "35,000-50,000", "50,000-75,000") 

incomeGroup <- factor(incomeGroup, levels = c("<10,000", "10,000-15,000", "15,000-20,000", "20,000-25,000", "25,000-35,000", "35,000-50,000", "50,000-75,000", ">75,000")) 

diabetic <- c("NonDiabetic", "NonDiabetic", "NonDiabetic", "NonDiabetic", "NonDiabetic", "NonDiabetic", "NonDiabetic", "NonDiabetic", "Diabetic", "Diabetic", "Diabetic", "Diabetic", "Diabetic", "Diabetic", "Diabetic", "Diabetic") 

diabetic <- factor(diabetic) 

percent <- c(0.87689664503343, 0.931739649923405, 0.805685791204679, 0.847739295548242, 0.839568230766604, 0.864813732451467, 0.862379127705366, 0.916662929943874, 0.12310335496657, 0.0682603500765948, 0.194314208795321, 0.152260704451758, 0.160431769233396, 0.135186267548533, 0.137620872294634, 0.0833370700561264) 

df <- cbind.data.frame(incomeGroup, diabetic, percent) 

ответ

7

Проблема вызвана наличием двух geom_bar вызовов, это приводит к оба бара будучи нанесены на верхней части друг с другом, а не сложены. Вам не нужны те, и подмножества, попробуйте указать в group аргумент вместо:

ggplot(df, aes(x = incomeGroup, y = percent, group = diabetic, fill = diabetic)) + 
    geom_bar(stat = "identity") 
+0

Вы также можете увернуться позиции брусков. Путь свеклы более лаконичен. –

+1

Без аргумента 'group' вы также получите правильный график. – Jaap