代码之家  ›  专栏  ›  技术社区  ›  Nathan123

如何使用ggplot为一个变量绘制三个条形图?[复制]

  •  -2
  • Nathan123  · 技术社区  · 6 年前

    我有以下数据集

    prg<-c('BRK1','BRK2','MAN1','QN')
    comp<-c(5,0,12,9)
    reg<-c(0,5,0,0)
    term<-c(3,0,0,0)
    df<-data.frame(prg,comp,reg,term)
    df
    
      prg comp reg term
    1 BRK1    5   0    3
    2 BRK2    0   5    0
    3 MAN1   12   0    0
    4   QN    9   0    0
    

    基本上,我想用 ggplplot 哪里 prg 以…的形式 comp reg term

    我该怎么做呢?

    3 回复  |  直到 6 年前
        1
  •  0
  •   Ricardo Saporta    6 年前

    你得先把它融化再策划

    1熔化

    library(tidyverse)
    df.melted <- df %>% melt(id.var="prg")
    #      prg variable value
    #  1  BRK1     comp     5
    #  2  BRK2     comp     0
    #  3  MAN1     comp    12
    #  4    QN     comp     9
    #  5  BRK1      reg     0
    #  6  BRK2      reg     5
    #  7  MAN1      reg     0
    #  8    QN      reg     0
    #  9  BRK1     term     3
    #  10 BRK2     term     0
    #  11 MAN1     term     0
    #  12   QN     term     0
    

    2策划

    ## Then plot it.  
    ## Use the `fill` parameter to get the breakdown
    library(ggplot2)
    ggplot(df.melted, aes(x = prg, fil=variable, y=value)) + 
      geom_bar(stat = "identity") + 
      ggtitle("StackOverflow Roolz!")
    

    enter image description here

        2
  •  0
  •   Megazord    6 年前

    我同意里卡多·萨波尔塔的观点,但我可以补充一点,没有position=“dodge”,整个事情很难理解。

    library(tidyverse)
    
    df.tidy <- gather(df, key, value, - prg)
    
    ggplot(data = df.tidy, aes(x = factor(prg), y = value, col = key)) +
    geom_bar(stat = "identity", position = "dodge")
    

    这样就可以将这些条隔开,并且彼此区分开来。

        3
  •  0
  •   tmfmnk    5 年前

    使用 reshape2 ggplot2 :

    df %>%
      melt(id.vars = "prg") %>%
      ggplot(aes(prg, value)) +   
      geom_bar(aes(fill = variable), position = "dodge", stat = "identity")
    

    enter image description here

    推荐文章