Увеличение вертикального пространства между сегментами в базе R - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь увеличить расстояние между каждым сегментом для каждого последующего интервала, чтобы избежать переполнения. Не уверен, как подойти к этому, чтобы он увеличивался по вертикали в l oop.

Вот мой код и некоторые воспроизводимые данные:


set.seed(200)
x <- rnorm(100, 10) 
truemean <- mean(x)

mat <- replicate(100, t.test(sample(x, rep = T))$conf.int) 
mat <- t(mat)

myfunc <- function(mat, truemean) {

  plot(x = c(min(mat[ , 1]), max(mat[ , 2])), 
       y = c(1, 100), 
       type = "n", 
       xlab = "0:100",
       ylab = "0:100")

  abline(v = truemean)

  for (i in 1:nrow(mat)) {

    if (mat[i, 1] <= truemean & mat[i, 2] >= truemean) {

      segments(x0 = mat[i, 1], y0 = i, 
               x1 = mat[i, 2], y1 = i, 
               col = "blue",
               lwd = 2)

    } else {

      segments(x0 = mat[i, 1], y0 = i, 
               x1 = mat[i, 2], y1 = i, 
               col = "red", 
               lwd = 2) 

    }

  }

}

myfunc(mat, truemean) 

1 Ответ

1 голос
/ 09 апреля 2020

Вы, конечно, можете добавить все, что хотите, в сегментный вызов, но я не уверен, что вы спрашиваете. Сначала мы можем значительно упростить ваш код:

set.seed(200)
x <- rnorm(100, 10) 
truemean <- mean(x)

mat <- replicate(100, t.test(sample(x, rep = T))$conf.int) 
mat <- t(mat)

yval <- seq(dim(mat)[1])
clr <- ifelse(mat[, 1] <= truemean & mat[, 2] >= truemean, "blue", "red") 
plot(NA, xlim=c(min(mat[ , 1]), max(mat[ , 2])), ylim=c(0, length(yval)), type="n",
     xlab="Conf Int", ylab="Trials")
abline(v=truemean)
segments(mat[, 1], yval, mat[, 2], yval, col=clr)

Это дает следующий график:

ConfIntPlot

Вы можете заменить yval с yval+.1 в функции segments, чтобы сдвинуть все вверх. Если линий так много, что они перекрываются, вы можете увеличить высоту графика, чтобы освободить место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...