gpt4 book ai didi

r - 如何在 ggplot2 中创建自定义的 "geom_box"?

转载 作者:行者123 更新时间:2023-12-04 11:29:52 24 4
gpt4 key购买 nike

我想要一些类似于 geom_boxplot 的东西,但它只会有一个框,并且我可以为框的下部和上部设置函数,例如,显示来自平均值的数据的正负 1 SD .我不是如果stat_boxplot可以用于此目的,或者如果其他一些功能更适合。

这可以(几乎)使用 stat="identity"和预计算手动完成,例如:

y <- rnorm(100)
y1 <- mean(y) - sd(y)
y2 <- mean(y) + sd(y)
df1 <- data.frame(y)
df2 <- data.frame(
x = 1,
y0 = y1,
y25 = y1,
y50 = y1, # this is a problem...
y75 = y2,
y100 = y2
)

ggplot(df1, aes(x=1,y=y)) +
geom_boxplot() +
geom_boxplot(data = df2,
mapping = aes(x = 1, y = 1, ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
stat = "identity", alpha = 0.1, fill = "red")

enter image description here

这个例子有几个问题:
  • 框不是箱线图的宽度
  • 盒子的下部比上部有一条粗线(因为我需要说“中间”应该在哪里)
  • 计算需要根据数据手动进行(可以包装在函数中,但由于其他问题,我还没有解决)。

  • 简而言之,我想要 geom_box 之类的东西,但无法从谷歌搜索中找到它,我很乐意提供有关如何继续编写此类自定义 geom 函数的一些指导(我猜 this 是一个开始,但欢迎提供更多帮助)。

    最佳答案

    newbox <- function(values) {
    values <- na.omit(values)
    data.frame(
    ymin = mean(values) - sd(values),
    lower = mean(values) - sd(values),
    middle = mean(values),
    upper = mean(values) + sd(values),
    ymax = mean(values) + sd(values),
    width = 0.75
    )
    }

    ggplot(iris, aes(Species, Sepal.Length)) +
    stat_summary(fun.data = newbox, geom = "boxplot", fatten = NA)

    enter image description here

    像那样?

    如果你想要没有填充,你可以使用内置函数,如:
    ggplot(iris, aes(Species, Sepal.Length)) + 
    stat_summary(fun.data = mean_sdl, fun.args = list(mult = 1),
    geom = "crossbar", fatten = NA)

    关于r - 如何在 ggplot2 中创建自定义的 "geom_box"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495304/

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