Попытка воссоздать сюжет с порогами в ggplot - PullRequest
1 голос
/ 25 сентября 2019

Итак, в основном я пытаюсь воссоздать этот сюжет в ggplot, чтобы соответствовать моей теме: original plot

, и я подошел довольно близко: recreation

но я могуне воссоздай порог в моем сюжете.Как я могу добавить это в мой ggplot?Вот исходный код оригинальной функции построения графиков:

function (data, option = c("alpha", "xi", "quantile"), start = 15,end = NA, 
  reverse = FALSE, p = NA, ci = 0.95, auto.scale = TRUE, labels = TRUE, ...) 
    {
        if (is.timeSeries(data)) 
            data <- as.vector(series(data))
        data <- as.numeric(data)
        ordered <- rev(sort(data))
        ordered <- ordered[ordered > 0]
        n <- length(ordered)
        option <- match.arg(option)
        if ((option == "quantile") && (is.na(p)))
            stop("\nInput a value for the probability p.\n")
        if ((option == "quantile") && (p < 1 - start/n)) {
            cat("Graph may look strange !! \n\n")
            cat(paste("Suggestion 1: Increase `p' above", format(signif(1 - 
                start/n, 5)), "\n"))
            cat(paste("Suggestion 2: Increase `start' above ", ceiling(length(data) * 
                (1 - p)), "\n"))
        }
        k <- 1:n
        loggs <- logb(ordered)
        avesumlog <- cumsum(loggs)/(1:n)
        xihat <- c(NA, (avesumlog - loggs)[2:n])
        alphahat <- 1/xihat
        y <- switch(option, alpha = alphahat, xi = xihat, quantile = ordered * 
            ((n * (1 - p))/k)^(-1/alphahat))
        ses <- y/sqrt(k)
        if (is.na(end)) 
            end <- n
        x <- trunc(seq(from = min(end, length(data)), to = start))
        y <- y[x]
        ylabel <- option
        yrange <- range(y)
        if (ci && (option != "quantile")) {
            qq <- qnorm(1 - (1 - ci)/2)
            u <- y + ses[x] * qq
            l <- y - ses[x] * qq
            ylabel <- paste(ylabel, " (CI, p =", ci, ")", sep = "")
            yrange <- range(u, l)
        }
        if (option == "quantile") 
            ylabel <- paste("Quantile, p =", p)
        index <- x
        if (reverse) 
            index <- -x
        if (auto.scale) {
            plot(index, y, ylim = yrange, type = "l", xlab = "", 
                ylab = "", axes = FALSE, ...)
        }
        else {
            plot(index, y, type = "l", xlab = "", ylab = "", axes = FALSE, 
                ...)
        }
        axis(1, at = index, labels = paste(x), tick = FALSE)
        axis(2)
        threshold <- findthreshold(data, x)
        axis(3, at = index, labels = paste(format(signif(threshold, 
            3))), tick = FALSE)
        box()
        if (ci && (option != "quantile")) {
            lines(index, u, lty = 2, col = 2)
            lines(index, l, lty = 2, col = 2)
        }
        if (labels) {
            title(xlab = "Order Statistics", ylab = ylabel)
            mtext("Threshold", side = 3, line = 3)
        }
        return(invisible(list(x = index, y = y)))
    }

Спасибо за вашу помощь!

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