[R] adding results to plot
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Sep 17 21:56:17 CEST 2021
Hello,
*.test functions in base R return a list of class "htest", with its own
print method.
The method text.htest for objects of class "htest" below is a hack. I
adapted the formating part of the code of print.htest to plot text().
I find it maybe too complicated but it seems to work.
Warning: Not debugged at all.
text.htest <- function (ht, x, y = NULL, digits = getOption("digits"),
prefix = "", adj = NULL, ...) {
out <- list()
i_out <- 1L
out[[i_out]] <- paste(strwrap(ht$method, prefix = prefix), sep = "\n")
i_out <- i_out + 1L
out[[i_out]] <- paste0("data: ", ht$data.name)
stat_line <- NULL
i_stat_line <- 0L
if (!is.null(ht$statistic)) {
i_stat_line <- i_stat_line + 1L
stat_line[[i_stat_line]] <- paste(names(ht$statistic), "=",
format(ht$statistic, digits =
max(1L, digits - 2L)))
}
if (!is.null(ht$parameter)) {
i_stat_line <- i_stat_line + 1L
stat_line[[i_stat_line]] <- paste(names(ht$parameter), "=",
format(ht$parameter, digits =
max(1L, digits - 2L)))
}
if (!is.null(ht$p.value)) {
fp <- format.pval(ht$p.value, digits = max(1L, digits - 3L))
i_stat_line <- i_stat_line + 1L
stat_line[[i_stat_line]] <- paste("p-value",
if (startsWith(fp, "<")) fp else
paste("=", fp))
}
if(!is.null(stat_line)){
i_out <- i_out + 1L
#out[[i_out]] <- strwrap(paste(stat_line, collapse = ", "))
out[[i_out]] <- paste(stat_line, collapse = ", ")
}
if (!is.null(ht$alternative)) {
alt <- NULL
i_alt <- 1L
alt[[i_alt]] <- "alternative hypothesis: "
if (!is.null(ht$null.value)) {
if (length(ht$null.value) == 1L) {
alt.char <- switch(ht$alternative, two.sided = "not equal to",
less = "less than", greater = "greater than")
i_alt <- i_alt + 1L
alt[[i_alt]] <- paste0("true ", names(ht$null.value), " is ",
alt.char,
" ", ht$null.value)
}
else {
i_alt <- i_alt + 1L
alt[[i_alt]] <- paste0(ht$alternative, "\nnull values:\n")
}
}
else {
i_alt <- i_alt + 1L
alt[[i_alt]] <- ht$alternative
}
i_out <- i_out + 1L
out[[i_out]] <- paste(alt, collapse = " ")
}
if (!is.null(ht$conf.int)) {
i_out <- i_out + 1L
out[[i_out]] <- paste0(format(100 * attr(ht$conf.int, "conf.level")),
" percent confidence interval:\n", " ",
paste(format(ht$conf.int[1:2], digits =
digits), collapse = " "))
}
if (!is.null(ht$estimate)) {
i_out <- i_out + 1L
out[[i_out]] <- paste("sample estimates:", round(ht$estimate,
digits = digits), sep = "\n")
}
i_out <- i_out + 1L
out[[i_out]] <- "\n"
names(out)[i_out] <- "sep"
out <- do.call(paste, out)
if(is.null(adj)) adj <- 0L
text(x, y, labels = out, adj = adj, ...)
invisible(out)
}
res <- shapiro.test(rnorm(100))
plot(1,1, ylim = c(0, length(res) + 1L))
text(res, 0.6, length(res) - 1)
res
res2 <- t.test(rnorm(100))
plot(1,1, ylim = c(0, length(res2) + 1L))
text(res2, 0.6, length(res2) - 1L)
res2
Hope this helps,
Rui Barradas
Às 15:12 de 16/09/21, PIKAL Petr escreveu:
> Dear all
>
> I know I have seen the answer somewhere but I am not able to find it. Please
> help
>
>> plot(1,1)
>> res <- shapiro.test(rnorm(100))
>> res
>
> Shapiro-Wilk normality test
>
> data: rnorm(100)
> W = 0.98861, p-value = 0.5544
>
> I would like to add whole res object to the plot.
>
> I can do it one by one
>> text(locator(1), res$method)
>> text(locator(1), as.character(res$p.value))
> ...
> But it is quite inconvenient
>
> I could find some way in ggplot world but not in plain plot world.
>
> Best regards
> Petr
>
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list