gpt4 book ai didi

r - 创建具有不同比例的累积分布曲线 (ECDF) 的 ggplot2 直方图

转载 作者:行者123 更新时间:2023-12-05 01:17:56 25 4
gpt4 key购买 nike

使用 ggplot2,我可以使用以下代码创建具有累积分布曲线的直方图。但是,stat_ecdf 曲线被缩放到左侧 y 轴。

library(ggplot2)
test.data <- data.frame(values = replicate(1, sample(0:10,1000, rep=TRUE)))
g <- ggplot(test.data, aes(x=values))
g + geom_bar() +
stat_ecdf() +
scale_y_continuous(sec.axis=sec_axis(trans = ~./100, name="percentage"))

这是生成的图表(您可以在底部看到 ecdf): ggplot result

如何将 stat_ecdf 缩放到第二个 y 轴?

最佳答案

通常,您希望将内部计算的 ECDF 值(累积密度)(称为 ..y..)乘以轴变换的倒数,使其垂直范围将类似于条形图:

library(tidyverse)
library(scales)

set.seed(2)
test.data <- data.frame(values = replicate(1, sample(0:10,1000, rep=TRUE)))

ggplot(test.data, aes(x=values)) +
geom_bar(fill="grey70") +
stat_ecdf(aes(y=..y..*100)) +
scale_y_continuous(sec.axis=sec_axis(trans = ~./100 , name="percentage", labels=percent)) +
theme_bw()

enter image description here

因为您在 11 个桶中随机分配了 1,000 个值,结果恰好两个 y 尺度都是 10 的倍数。下面是一个更通用的版本。

此外,如果能够以编程方式确定转换因子就好了,这样我们就不必在看到图中的条形高度后手动选择它。为此,我们计算 ggplot 外部最高条的高度,并在图中使用该值(在下面称为 max_y)。我们还使用 pretty 函数将 max_y 重置为与最高柱关联的 y 轴上的最高突破值(ggplot 使用 pretty 来设置默认轴中断),以便主要和次要 y 轴中断对齐。

最后,我们使用 aes_bquote 创建一个带引号的调用,这样 ggplot 就会识别传递的 max_y 值。

set.seed(2)
test.data <- data.frame(values = replicate(1, sample(0:10,768, rep=TRUE)))

max_y = max(table(test.data$values))
max_y = max(pretty(c(0,max_y)))

ggplot(test.data, aes(x=values)) +
geom_bar(fill="grey70") +
stat_ecdf(aes_(y=bquote(..y.. * .(max_y)))) +
scale_y_continuous(sec.axis=sec_axis(trans = ~./max_y, name="percentage", labels=percent)) +
theme_bw()

enter image description here

关于r - 创建具有不同比例的累积分布曲线 (ECDF) 的 ggplot2 直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com