这是我的数据:
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中创建更漂亮的图形。
请注意每个ind级别(1:4)为四栏(1:4)。每个ind的所有四个条都分组在一个地方。
答案 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)
}
}
答案 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())
由于我使用geom_tile
,你会失去“条形”之间的分离。我认为唯一的另一种选择是使用geom_rect
,并指定更多参与的坐标。