首页 > 解决方案 > ggplot2 - 如何调整 stat_bin 和 stat 以使用不同变量的计算

问题描述

目标是生成x条形所在位置的“直方图” sum(y)/count(x),其中y是描述数据的另一个变量。重点是使用ggplotbinning 来进行分组部分。我不想自己计算分箱然后执行计算。

例子:

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)

在此处输入图像描述

所以理论上我正在寻找的是这样的: ggplot(w, aes(k)) + geom_histogram(aes(y = stat(sum(y)/count)))

但它会产生这个:

在此处输入图像描述

标签: rggplot2histogram

解决方案


不确定这是否是您想要的,但 sum(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)))

编辑:

不确定这是否对您有帮助,这里我使用与 ggplot2s 默认值相同的 binwidth (30):

    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")

这使得这个数字:

在此处输入图像描述


推荐阅读