如何使用ggplot为变量绘制三个条形?

时间:2018-09-20 19:49:52

标签: r ggplot2

我有以下数据集

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在x轴上,每个prg都有三个条形,形式为{{1} } compreg代表相应的计数。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您必须在绘制之前将其融化

1。融化

Administrators

2。绘图

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

enter image description here

答案 1 :(得分:0)

我同意里卡多·萨波特(Ricardo Saporta),但我可以补充一点,如果没有位置=“闪避”,整个事情将很难理解。

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

这允许条形图相互隔开和区分。

答案 2 :(得分:0)

使用reshape2ggplot2

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

enter image description here