如何制作漂亮的定性条形组合图表

4

这是我的数据:

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个有序的条形和颜色格式。个体之间应该有更大的间隔。我可能有任意数量的个体。以下是在Excel中绘制的预期图表,我想用R创建更漂亮的图表。
请注意,每个ind级别(1:4)都有四个bar(1:4)。每个ind的所有四个bar都分组在一个位置。
2个回答

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


感谢您的正确答案。我们可以在每个图形周围放置边距矩形吗? - jon

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,但是我认为指定该矩形的坐标将会更加复杂。


谢谢您的回答...但是我需要在条之间留出空间(用于符号目的),而且每个条内部不应有线条... - jon
@John 嗯,这就是你挑剔的代价! ;) 如果你已经在Excel中有了这个图表,请直接使用它。 - joran
@hadley 我在文档中没有看到width参数,而且当我尝试使用它时似乎没有效果。你能给我解释一下吗? - joran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接