如何生成好的定性条形图组合图

时间:2011-12-21 21:40:14

标签: r graphics graph plot

这是我的数据:

ind <- c( rep(1, 20), rep (2, 20), rep (3, 20), rep(4, 20))
bar <- c(rep(rep(1:4, each = 5),  4))

mark <- c(rep ("A", 5), rep("B", 5), rep("C",5), rep("D",5),
          rep("B", 20), rep("C", 20), "A", "B", "C", "A", "C","A",
          "D", "D", "D", "D","A", "C", "C", "A", "B", "B","B",
          "C","C","C")

dataf <- data.frame(ind, bar, mark)

每个人(ind)按顺序有4个条形,并且颜色为fomatted。个人之间应该有更大的空间。我可能有任意数量的人。在excel中绘制了以下预期图形,我想在R中创建更漂亮的图形。

enter image description here

请注意每个ind级别(1:4)为四栏(1:4)。每个ind的所有四个条都分组在一个地方。

2 个答案:

答案 0 :(得分:5)

您可以尝试使用rect功能单独绘制每个矩形。尝试运行循环来遍历堆栈中的每个框:

par(mfrow=c(2, 2))

for(i in unique(ind)) {
  plot(0, col=0, bty="n", xaxt="n", yaxt="n", xlab = i, ylab = "", xlim=c(0, 5), ylim=c(-6, -1))
  for(j in 1:4) {
    for(k in 1:5) {
      rect(j-0.4, -k-1, j+0.4, -k, col = which(unique(mark)==matrix(mark[ind==i], 5, 4)[k,j])+1, border = rgb(0,0,0,0))
      text(j, -k-0.5, labels = matrix(mark[ind==i], 5, 4)[k,j])
    }
    rect(j-0.4, -6, j+0.4, -1)
  }
}

enter image description here

答案 1 :(得分:4)

以下是使用ggplot的一个选项:

dataf$y <- rep(5:1,times = 16)

ggplot(dataf,aes(x=bar,y=y)) + 
    facet_wrap(~ind) +
    geom_tile(aes(fill = mark),colour = "black") + 
    geom_text(aes(label = mark)) + 
    labs(x = NULL,y = NULL) +
    opts(axis.text.x = theme_blank(),axis.text.y = theme_blank())

enter image description here

由于我使用geom_tile,你会失去“条形”之间的分离。我认为唯一的另一种选择是使用geom_rect,并指定更多参与的坐标。