ggplot2 - как настроить stat_bin и stat, чтобы использовать вычисление другой переменной - PullRequest
0 голосов
/ 08 февраля 2020

Цель состоит в том, чтобы сгенерировать "гистограмму" из x, где столбцы - sum(y)/count(x), где y - другая переменная, описывающая данные. Смысл в том, чтобы использовать ggplot binning для группирования. Я не хочу вычислять биннинг самостоятельно, а затем выполнить расчет.

пример:

library(ggplot2)
library(data.table)

k <- runif(1000)
k <- k[order(k)]

y <- c(rbinom(n = 500, size = 1, prob = .05), rbinom(n = 500, size = 1, prob = .95))

w <- data.table(k, y)

, поэтому plot(w$k, w$y) дает

enter image description here

так что теоретически то, что я ищу, выглядит так: ggplot(w, aes(k)) + geom_histogram(aes(y = stat(sum(y)/count)))

но оно генерирует это:

enter image description here

1 Ответ

1 голос
/ 08 февраля 2020

Не уверен, что это именно то, что вам нужно, но сумма (y) будет одинаковой для всех баров.

library(ggplot2)
library(data.table)
set.seed(13434)
k <- runif(1000)
k <- k[order(k)]
y <- c(rbinom(n = 500, size = 1, prob = .05), rbinom(n = 500, size = 1, prob = .95))
w <- data.table(k, y)


    constant_value <- sum(w$y)

    ggplot(w, aes(k)) + geom_histogram(aes(y = stat(constant_value/count)))

дает точно такой же график, как и

    ggplot(w, aes(k)) + geom_histogram(aes(y = stat(sum(w$y)/count)))

Редактировать:

Не уверен, поможет ли это вам, здесь я использую ту же самую ширину бина (30), что и для ggplot2s по умолчанию:

    library(tidyverse)
    w %>% 
        arrange(k) %>% 
        mutate(bin = cut_interval(1:length(k), length=30, labels=FALSE)) %>% 
        group_by(bin) %>% 
        summarise(mean_y = mean(y),
                  mean_k = mean(k),
                  width = max(k) - min(k)) %>% 
        ggplot(aes(mean_k, mean_y, width=width)) +
        geom_bar(stat="identity") +
        labs(x="k", y="mean y")

, что делает этот показатель:

enter image description here

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