一个窗口中有多个VSS图

时间:2014-01-23 15:25:15

标签: r plot statistics psych

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

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")) }

为什么我在一个窗口中没有多个情节的任何建议?

1 个答案:

答案 0 :(得分:0)

在没有VSS参数的情况下调用函数plot。因此,使用默认值TRUE。这会重置您使用VSS.plot生成的绘图。您必须使用VSS致电plot = 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)
}
相关问题