这是我的问题:
#data 1:
lab1 <- 1:10
group <- rep(1:3, each = length (lab1))
label <- rep(lab1, 3)
avar <- rep(c(0, 1, 4, 5, 6, 8, 10, 11, 12, 13), 3)
myd <- data.frame (group, label, avar)
# data 2
fillcol <- rep(rnorm(length(lab1)-1, 0.5, 0.2), 3)
group1 <- rep(1:3, each = length(fillcol)/3)
# this variable will be used to fill color in bars
filld <- data.frame(group1, fillcol)
# now plotting
par(mfrow = c(3, 1))
par(mar = c(2.5, 1, 2.5, 1))
#plot1
myd1 <- myd[myd$group ==1,]
filld1 <- filld[filld$group1 ==1,]
blues <- colorRampPalette(c("yellow", "blue"))
barplot(as.matrix(diff(myd1$avar)), horiz=T, col=blues(10)[10* filld1$fillcol],
axes=F, xlab="Mark")
axis(1, labels=myd$label, at=myd$avar)
axis(3, labels=myd$avar, at=myd$avar)
虽然这个样本数据集,我有很多变量,我想自动化这个过程。
for (i in 1:length(unique(myd$group))){
par(mfrow = c(i, 1))
par(mar = c(2.5, 1, 2.5, 1))
myd[i] <- myd[myd$group ==i,]
filld[i] <- filld[filld$group1 ==i,]
blues <- colorRampPalette(c("yellow", "blue"))
barplot(as.matrix(diff(myd[i]$avar)), horiz=T,
col=blues(10)[10* filld1$fillcol], axes=F, xlab="Mark")
axis(1, labels=myd[i]$label, at=myd[i]$avar)
axis(3, labels=myd[i]$avar, at=myd[i]$avar)
}
Error in dim(data) <- dim : attempt to set an attribute on NULL
In addition: Warning messages:
1: In `[<-.data.frame`(`*tmp*`, i, value = list(group = c(1L, 1L, 1L, :
provided 3 variables to replace 1 variables
2: In `[<-.data.frame`(`*tmp*`, i, value = list(group1 = c(1L, 1L, :
provided 2 variables to replace 1 variables
编辑:我想创建一个循环,以便在循环中创建多个图形:
PS:我是R和stackoverflow的新手。如果问题不合适,请原谅我,虽然我阅读了指南并尝试遵守它
答案 0 :(得分:2)
如果你将它包装在这样的函数中,你应该能够让它工作并被多次调用。
colbarplot <- function(group) {
myd1 <- myd[myd$group == group,]
filld1 <- filld[filld$group1 == group,]
blues <- colorRampPalette(c("yellow", "blue"))
barplot(as.matrix(diff(myd1$avar)), horiz=T,
col=blues(10)[10* filld1$fillcol],
axes=F, xlab="Mark")
axis(1, labels=myd$label, at=myd$avar)
axis(3, labels=myd$avar, at=myd$avar)
}
par(mfrow = c(3, 1))
par(mar = c(2.5, 1, 2.5, 1))
sapply(unique(myd$group),function(x) colbarplot(x))
这将在您追求的一个页面上显示多个图。
答案 1 :(得分:0)
如果您希望制作一系列条形图,那么您的代码对我来说似乎很好。如果您希望生成包含子组的条形图,那么您可以查看以下链接: http://www.harding.edu/fmccown/r/
答案 2 :(得分:0)
这里有两个问题。你无意中在循环中覆盖'myd'和'filld'。 其次,您应该在开始时指定mfrow,然后生成图(本例中为3)。你正在中间重置mfrow。不是你想要的。
试试这个:
opar <- par(mfrow = c(length(unique(myd$group)), 1), mar = c(2.5, 1, 2.5, 1))
for (i in 1:length(unique(myd$group))){
myd1 <- myd[myd$group ==i,]
filld1 <- filld[filld$group1 ==i,]
blues <- colorRampPalette(c("yellow", "blue"))
barplot(as.matrix(diff(myd1$avar)), horiz=T,
col=blues(10)[10* filld1$fillcol], axes=F, xlab="Mark")
axis(1, labels=myd1$label, at=myd1$avar)
axis(3, labels=myd1$avar, at=myd1$avar)
}
par(opar);