如何在R中创建群集柱形图?

时间:2018-08-25 09:45:42

标签: r plot bar-chart

我需要在4个组中绘制2个类别的比率,以便进行易于理解的比较。

到目前为止,我这样做了,得到了2个地块:

x <- c(0.50, 0.53, 0.49, 0.47)
names(x) <- c("Mütter über Söhne", "Mütter über Töchter", "Väter über Söhne", 
              "Väter über Töchter")
barplot(x, xlab= "Gruppe", ylab = "Anteil Wörter abstrakt-logisch ", main = 
        "abstrakt-logisch")

x1 <- c(0.51, 0.54, 0.46, 0.49)
names(x1) <- c("Mütter über Söhne", "Mütter über Töchter", "Väter über Söhne", "Väter über Töchter")
barplot(x1, xlab= "Gruppe", ylab = "Anteil Wörter kreativ-verbal ", main = "kreativ-verbal")

我想比较4组中2个类别中单词的比率。因此,在“MütterüberSöhne”组中,类别1的第一比率(0.50)与类别2的第一比率(0.51)相比较。我还需要为x轴=“组”和y轴=“单词比率”命名。 它应该看起来像这样:

enter image description here

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

如果您不熟悉ggplot2,则可以使用这种基本方式。

x1 <- c(0.50, 0.53, 0.49, 0.47)
x2 <- c(0.51, 0.54, 0.46, 0.49)
group <- c("group1", "group2", "group3", "group4")

plot.new()
plot.window(xlim = c(1, 20), ylim = c(0, 0.6))
abline(h = 0:6/10, col = "grey")
barplot(rbind(x1, x2), beside = T, space = c(0.5, 2), axes = F,
        col = c("grey10", "grey"), xlab = "groups", ylab = "ratios of words",
        names.arg = group, add = T)
legend(x = "topright", legend = c("category 1", "category 2"),
       fill = c("grey10", "grey"), box.col = NA)
mtext(0:6/10, side = 2, at = 0:6/10)

space由两个数字指定,其中第一个是同一组中的小节之间的间隔,第二个是组之间的间隔。

enter image description here

答案 1 :(得分:1)

这是您的正确答案。您需要首先以适当的方式定义数据集:

dt<-data.frame(
  group= c("Mütter über Söhne", "Mütter über Töchter", "Väter über Söhne", "Väter über Töchter"),
  category=c("category1","category1","category1","category1",    "category2","category2","category2","category2"),
  ratio= c(0.50, 0.53, 0.49, 0.47,  0.51, 0.54, 0.46, 0.49))

head(dt)

然后使用ggplot绘制

    library(ggplot2)


ggplot(data=dt, aes(x=group, y=ratio, fill=category)) +
  geom_bar(stat="identity", position=position_dodge())+
  scale_fill_brewer(palette="Paired")+                #Remove background
  theme(axis.line = element_line(colour = "black"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

最后的输出是:

enter image description here