2014-01-23 53 views
0

我试图在一个窗口中比较多个VSS图。然而通常的程序par(mfrow=c(x,y)似乎不起作用。 layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE))也没有。我拿下面的例子William Revelle's website。我不得不改变剧情指挥。它可能在某个阶段从plotVSS改为VSS.plot,而该示例尚未更新。一个窗口中有多个VSS图

require(psych) 
meanloading=.7 
ncases=400 
par(mfrow=c(2,4)) 

for (i in 1:4) 
{ x=VSS(VSS.simulate(ncases,36,i,meanloading),rotate="none") 
VSS.plot(x,paste(i, " factor no rotation")) } 

for (i in 1:4) 
{ x=VSS(VSS.simulate(ncases,36,i,meanloading),rotate="varimax") 
VSS.plot(x,paste(i, " factor varimax rotation")) } 

任何建议,为什么我没有得到比在一个窗口中的一个情节吗?

回答

0

函数VSS被调用时没有参数plot。因此,使用默认值TRUE。这将重置您生成的图形与VSS.plot。您必须拨打VSSplot = FALSE

第二个问题是功能VSS.plot本身。它调用par,因此所有图都出现在图框中的相同位置。

当您从VSS.plot函数中删除第一行和最后一行时,一切都会正常工作。修改后的版本VSS.plot2的代码可以在我的答案结尾找到。

require(psych) 
meanloading <- .7 
ncases <- 400 
par(mfrow=c(2,4)) 

for (i in 1:4) { 
    x <-VSS(VSS.simulate(ncases,36,i,meanloading),rotate="none", plot = FALSE) 
    VSS.plot2(x,paste(i, " factor no rotation")) 
} 

for (i in 1:4) { 
    x <- VSS(VSS.simulate(ncases,36,i,meanloading),rotate="varimax", plot = FALSE) 
    VSS.plot2(x,paste(i, " factor varimax rotation")) 
} 

enter image description here


VSS.plot修改后的版本:

VSS.plot2 <- function (x, title = "Very Simple Structure", line = FALSE) 
{ 
    #op <- par(no.readonly = TRUE) 
    n = dim(x) 
    symb = c(49, 50, 51, 52) 
    plot(x$cfit.1, ylim = c(0, 1), type = "b", 
     ylab = "Very Simple Structure Fit", 
     xlab = "Number of Factors", pch = 49) 
    if (line) 
     lines(x$fit) 
    title(main = title) 
    x$cfit.2[1] <- NA 
    x$cfit.3[1] <- NA 
    x$cfit.3[2] <- NA 
    x$cfit.4[1] <- NA 
    x$cfit.4[2] <- NA 
    x$cfit.4[3] <- NA 
    lines(x$cfit.2) 
    points(x$cfit.2, pch = 50) 
    lines(x$cfit.3) 
    points(x$cfit.3, pch = symb[3]) 
    lines(x$cfit.4) 
    points(x$cfit.4, pch = symb[4]) 
    #par(op) 
} 
+0

令人印象深刻。谢谢。 (我会给+1,但我没有足够的“声誉”)。 – Roman