对于报告,我正在按组汇总数据。由于版权问题,我在下面创建了一些虚拟数据(第一个列是组,然后是值):
X A B C D
1 1 12 0 12 0
2 2 24 0 15 0
3 3 56 0 48 0
4 4 89 0 96 0
5 5 13 3 65 0
6 6 11 16 0 0
7 7 25 19 0 0
8 8 24 98 0 0
9 9 18 111 0 0
10 10 173 125 0 0
11 11 10 65 0 0
我想为每个组(1:11)创建一个带有循环的barplot:
for(i in 1:11){x<-dummyloop[i,]
barplot(as.matrix(x), main=paste("Group", i), ylim=c(0,200))}
这可行,我为每个循环获取了一个barplot,但是它们最终以一乘四的方式绘制窗口,就像我使用par(mfrow = c(4,4))一样。 我需要单独的条形图。
因此,我使用了par(mfrow = c(1,1)),由于某种原因,该问题得以解决(我不使用par EVER,因为我仅导出具有单个图表的科学报告),但是“主要”在顶部被切除。
我也希望每个条形都是不同的颜色,所以我使用了:
for(i in 1:11){x<-dummyloop[i,]
barplot(as.matrix(x), main=paste("Group", i), col=c(1:5),
ylim=c(0,200))}
意识到着色矢量仅使用第一种颜色,我尝试了这种变化:
for(i in 1:11){x<-dummyloop[i,]
barplot(as.matrix(x), main=paste("Group", i), col=c(4:10)[1:ncol(x)],
ylim=c(0,200))}
这没用...
我似乎在这里的for循环中缺少一些关键细节,感谢您的帮助。多亏了这里的人,我是R新手,每天都在进步;)。
答案 0 :(得分:1)
不知道,为什么在基准图中。这是ggplot2
的替代方法。
for(i in 1:11){x<- gather(data[i,])
print(ggplot(data = x, aes(x = key, y = value, fill = cols)) +
geom_bar(stat = "identity", show.legend = FALSE) +
ggtitle(paste("Group ", i)) + theme(plot.title = element_text(hjust = 0.5)) +
ylim(0,200))
}
那么您的main
仍被切断吗?
然后扩展图顶部的边距。执行:
par(mar = c(2, 2, 3 , 2)) # c(bottom, left, top, right)
在绘制之前。实验时,您可以使用dev.off()
重设规格。
答案 1 :(得分:0)
停留在基数R上,您只需使用by
并根据组设置col
。
colors <- rainbow(length(unique(dat$X))) # define colors, 11 in your case
by(dat, dat$X, function(x)
barplot(as.matrix(x), main=paste("Group", x$X), ylim=c(0, 200), col=colors[x$X]))
数据
dat <- structure(list(X = 1:11, A = c(12L, 24L, 56L, 89L, 13L, 11L,
25L, 24L, 18L, 173L, 10L), B = c(0L, 0L, 0L, 0L, 3L, 16L, 19L,
98L, 111L, 125L, 65L), C = c(12L, 15L, 48L, 96L, 65L, 0L, 0L,
0L, 0L, 0L, 0L), D = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L)), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6", "7", "8", "9", "10", "11"))