Ось обрезана на множественном графике в R

Я использую layout() для создания нескольких графиков в R и хочу, чтобы ось Y отображалась только на нижних графиках. Поэтому я убираю их из цикла и добавляю внизу вместе с осями, но когда я это делаю, они обрезаются. Вот код, который я использую:

onlytext <- function(string){
  plot(0:1, 0:1, bty='n', type='n', xaxt='n', yaxt='n', xlab='', ylab='')
  text(0.5, 0.5, string, cex=1.2, font=2)
}
nf <- layout(matrix(c(0,1:14), 5, 3, byrow=TRUE), heights = c(2,5,5,5,5), widths = c(1.5,4,4))

par (mar=c(.3,.3,.3,.3))
onlytext ('Approval'); onlytext ('Vote Choice')
name_vec <- c("Strongly Approve", "Approve", "Disapprove", "Strongly Disapprove")    
control_means_tab <- matrix(sample(rnorm(100), 48), ncol = 6, nrow = 4)
x <- seq(1,6)

for(i in 1:3){  
onlytext(name_vec[i])     
    for(j in 1:2){          

        plot(x, control_means_tab[j,], xaxt = 'n', xlab = '', ylab = '', xaxt='n', bty = "n",  ylim = c((min(c(control_means_tab, scorecard_means_tab, endorsement_means_tab))- .02),(max(c(control_means_tab, scorecard_means_tab, endorsement_means_tab)) + .02)),  col = "blue", pch = 19, cex =.6)


}   
}

onlytext(name_vec[4])     

        plot(x, control_means_tab[j,], xlab = '', ylab = '', xaxt = "n", bty = "n",  ylim = c((min(c(control_means_tab, scorecard_means_tab, endorsement_means_tab))- .02),(max(c(control_means_tab, scorecard_means_tab, endorsement_means_tab)) + .02)),  col = "blue", pch = 19, cex =.6)
        axis(1, 1:6, LETTERS[1:6])


        plot(x, control_means_tab[j,], xaxt = 'n', xlab = '', ylab = '', xaxt='n', bty = "n",  ylim = c((min(c(control_means_tab, scorecard_means_tab, endorsement_means_tab))- .02),(max(c(control_means_tab, scorecard_means_tab, endorsement_means_tab)) + .02)),  col = "blue", pch = 19, cex =.6)
                    axis(1, 1:6, LETTERS[1:6])

Любые мысли о том, как вернуть эту ось, приветствуются!


person coding_heart    schedule 18.06.2013    source источник
comment
Ваш код у меня не работает. Кроме того, я не понимаю, почему в матрице layout() есть место для 14 графиков (0 означает, что в этом месте ничего не отображается), но есть 8 графиков (6 в цикле, 2 снаружи).   -  person rbatt    schedule 19.06.2013


Ответы (1)


Я не смог заставить работать ylim часть вашего кода, так как вы не предоставили информацию о scorecard_means_tab или endorsement_means_tab, но я думаю, что в целом понимаю, что вам нужно. Попробуйте этот код и посмотрите, поможет ли он.

x <- seq(1, 6)
y <- matrix(sample(rnorm(100), 48), ncol=6, nrow=8)
ylabs <- rep(c("Strongly Approve", "Approve", "Disapprove", "Strongly Disapprove"), rep(2, 4))
xlabs <- rep(c("Approval", "Vote Choice"), 4)
par(mfrow=c(4, 2), mar=c(1, 1, 1, 1), oma=c(2, 4, 2, 1))
for(i in seq(dim(y)[1])) {
    if(i < 6.5) {
        plot(x, y[i, ], xaxt='n', xlab='', ylab='', bty="n", col="blue", pch=19, cex=0.6)
        } else {
        plot(x, y[i, ], xlab='', ylab='', bty="n", col="blue", pch=19, cex=0.6)
        }
    if(i < 2.5) mtext(xlabs[i], side=3, line=1)
    if(i %in% c(1, 3, 5, 7)) mtext(ylabs[i], side=2, line=3)
    }
person Jean V. Adams    schedule 18.06.2013
comment
Спасибо @JVA; изменение кода для включения аргумента oma работает для меня (mar=c(.3,.3,.3,.3),oma = c(3,.3,.3,.3)) - person coding_heart; 19.06.2013