Как редактировать тестовый график Тьюки в R - PullRequest
1 голос
/ 22 марта 2020

Я выполнил пост-хо c тест Тьюки на ANOVA, а затем составил график результатов. Кажется, я не могу изменить заголовок оси x или заголовок оси y. Я получаю эту ошибку:

Error in plot.default(c(xi[, "lwr"], xi[, "upr"]), rep.int(yvals, 2L),  : 
  formal argument "xlab" matched by multiple actual arguments

Это мой соответствующий код:

tuk <- TukeyHSD(final)
plot(tuk,xlab="Differences in mean departure times", ylab="Comparisons")

Мне также нужно изменить метки меток оси Y, но я не знаю, как.

Спасибо.

1 Ответ

3 голосов
/ 22 марта 2020

Так как из-за того, как они написали метод plot() для объекта класса TukeyHSD, вы не можете изменить метки оси по умолчанию, эта деталь скрыта на странице справки ?TuketHSD.

Но вы может легко взломать копию, которая позволяет вам сделать это. Сначала найдите код для существующего метода с помощью getAnywhere(plot.TukeyHSD). Затем измените его следующим образом:

tuk_plot <- function (x, xlab, ylab, ylabels = NULL, ...) {
  for (i in seq_along(x)) {
    xi <- x[[i]][, -4L, drop = FALSE]
    yvals <- nrow(xi):1L
    dev.hold()
    on.exit(dev.flush())
    plot(c(xi[, "lwr"], xi[, "upr"]), rep.int(yvals, 2L), 
         type = "n", axes = FALSE, xlab = "", ylab = "", main = NULL, 
         ...)
    axis(1, ...)
    # change for custom axis labels
    if (is.null(ylabels)) ylabels <- dimnames(xi)[[1L]]

    axis(2, at = nrow(xi):1, labels = ylabels, 
         srt = 0, ...)
    abline(h = yvals, lty = 1, lwd = 0.5, col = "lightgray")
    abline(v = 0, lty = 2, lwd = 0.5, ...)
    segments(xi[, "lwr"], yvals, xi[, "upr"], yvals, ...)
    segments(as.vector(xi), rep.int(yvals - 0.1, 3L), as.vector(xi), 
             rep.int(yvals + 0.1, 3L), ...)
    title(main = paste0(format(100 * attr(x, "conf.level"), 
                               digits = 2L), "% family-wise confidence level\n"), 
          # change for custom axis titles
          xlab = xlab, ylab = ylab)

    box()
    dev.flush()
    on.exit()
  }
}

Теперь вы можете настроить ось x и y вместе с пользовательскими метками y:

tuk_plot(tuk, "Hello X Axis", "Hello Y Axis", c("One", "Two", "Three"))

enter image description here

Если вы не предоставите y-метки, то появятся метки по умолчанию из модели.

Воспроизводимый пример:

fm1 <- aov(breaks ~ wool + tension, data = warpbreaks))
tuk <- TukeyHSD(fm1, "tension")
...