Несколько графиков VSS в одном окне

Я попытался сравнить несколько графиков VSS в одном окне. Однако обычная процедура с par(mfrow=c(x,y), похоже, не работает. И layout(matrix(c(1,2,3,4), 2, 2, byrow = TRUE)) тоже. Я взял следующий пример веб-сайта Уильяма Ревелла. Пришлось изменить команду сюжета. На каком-то этапе он мог быть изменен с 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")) }

Есть предложения, почему я не вижу более одного графика в окне?


person Roman    schedule 23.01.2014    source источник


Ответы (1)


Функция 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")) 
}

введите описание изображения здесь


Модифицированная версия 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)
}
person Sven Hohenstein    schedule 23.01.2014
comment
Очень впечатляюще. Спасибо. (Я бы поставил +1, но у меня недостаточно репутации). - person Roman; 24.01.2014