2014-01-23 88 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