首页 文章

堆积的多元条形图在条形内部具有百分比

提问于
浏览
-4

我有以下数据:

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轴我想要 termgradeverification_status . 这意味着我将需要3个堆叠的条形图 .

如何使用ggplot绘图?请帮忙 .

1 回答

  • 0

    您可以使用 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)
    

    结果是:

相关问题