Сложенные многомерные гистограммы, имеющие процент внутри баров - PullRequest
0 голосов
/ 30 июня 2018

У меня есть следующие данные:

loan_amnt   term      grade sub_grade home_ownership  verification_status  d_status
7000        60 months C     C5        RENT            Not Verified         Not Defaulted
6500        60 months C     C3        OWN             Not Verified         Not Defaulted
12000       36 months B     B5        OWN             Verified             Defaulted
9000        36 months C     C1        RENT            Verified             Not Defaulted
1000        36 months D     D1        RENT            Not Verified         Defaulted

Мне потребовалась многомерная гистограмма, на которой я хотел бы заполнить d_status внутри, а ось y - в процентах от значения. По оси X я хочу term, grade и verification_status. Это означает, что мне понадобятся 3 сложенных гистограммы вместе.

Как я могу построить график, используя ggplot? Пожалуйста помоги.

1 Ответ

0 голосов
/ 02 августа 2018

Вы можете использовать библиотеку gridExtra.

df <- read.table(text = "loan_amnt   term      grade sub_grade home_ownership  verification_status  d_status
7000        60_months C     C5        RENT            Not_Verified         Not_Defaulted
6500        60_months C     C3        OWN             Not_Verified         Not_Defaulted
12000       36_months B     B5        OWN             Verified             Defaulted
9000        36_months C     C1        RENT            Verified             Not_Defaulted
1000        36_months D     D1        RENT            Not_Verified         Defaulted", 
                 header = TRUE)

library(ggplot2)
library(scales)
g1 <- ggplot(df, aes(x = term, fill = d_status)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(labels = percent) + 
  ylab("") +
  theme(strip.text.x = element_blank(),
      legend.position=c(0.85, 0.9))

g2 <- ggplot(df, aes(x = grade, fill = d_status)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(labels = percent) + 
  ylab("")  +
  theme(strip.text.x = element_blank(),
        legend.position=c(0.85, 0.9))


g3 <- ggplot(df, aes(x = verification_status, fill = d_status)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(labels = percent) + 
  ylab("") +
  theme(strip.text.x = element_blank(),
        legend.position=c(0.85, 0.9))


library(gridExtra)
grid.arrange(g1, g2, g3, nrow = 1)

Результат: Stacked bars with percentage

...