gpt4 book ai didi

r - 使用 geom_segment 指示 geom_errorbar 超出 log10 比例限制

转载 作者:行者123 更新时间:2023-12-05 06:27:07 24 4
gpt4 key购买 nike

我有一些数据,其中一些估计有很大的误差线。我想通过对图表设置限制来以有意义的比例绘制。但是,我还想指出错误栏超出限制的位置。最好使用箭头,如果可能的话,不使用 geom_segment,因为它似乎不能很好地与 log10 比例配合使用。之后在红色箭头下方绘制。解决方案是在 geom_errorbar 超出 ggplot 绘图限制的地方添加箭头或其他指示。

set.seed(12345)
data <- data.frame(A = rnorm(10),
group = c(rep("Dog", 5), rep("Cat", 5)),
Time = c(rep(1:5), rep(1:5)))
data <- data %>% mutate(
SE = abs(rnorm(10)),
B = A + SE,
C = A - SE
)

upper <- (with(data, max(B)) - 0.5) %>% exp()
lower <- (with(data, min(C)) + 0.5) %>% exp()

data <- data %>% mutate_at(vars(A, B, C), funs(exp))

library (ggplot2)
ggplot(data = data, aes(y = A, x = Time, color = group)) +
geom_point(position = position_dodge(width = 0.2), size = 2) +
geom_errorbar(aes(ymin = C, ymax = B), position = "dodge", width = 0.2, size = 0.8) +
coord_cartesian(ylim = c(lower, upper)) +
scale_y_log10()

enter image description here

最佳答案

我找到了一个不太精确的解决方案。您可以为向上的三角形调用一次 geom_point,为向下的三角形再次调用。唯一的问题是 coord_cartesian 似乎没有将限制精确地设置为指定值,因此您必须添加或减去每个限制以使三角形处于正确的位置。此外,由于 position_dodge 已经被使用,position_nudge 不可用。它涉及猜测要添加或减去 geom_point 的 y 坐标的值。

如果有更好的解决方案,请发表评论。

    library(ggplot2)
library(tidyverse)

set.seed(12345)
data <- data.frame(A = rnorm(10),
group = c(rep("Dog", 5), rep("Cat", 5)),
Time = c(rep(1:5), rep(1:5)))
data <- data %>% mutate(
SE = abs(rnorm(10)),
B = A + SE,
C = A - SE
)

upper <- (with(data, max(B)) - 0.5) %>% exp()
lower <- (with(data, min(C)) + 0.5) %>% exp()

data <- data %>% mutate_at(vars(A, B, C), funs(exp))

data <- data %>%
mutate(upper_out = ifelse(B > upper, upper, NA),
lower_out = ifelse(C < lower, lower, NA))

ggplot(data = data, aes(y = A, x = Time, color = group, fill = group)) +
geom_point(position = position_dodge(width = 0.2), size = 2) +
geom_errorbar(aes(ymin = C, ymax = B), position = "dodge", width = 0.2, size = 0.8) +
geom_point(aes(y = upper_out + 1.02), shape = 24,
position = position_dodge(width = 0.2), size = 4, show.legend = F) +
geom_point(aes(y = lower_out - 0.013), shape = 25,
position = position_dodge(width = 0.2), size = 4, show.legend = F) +
scale_y_log10() +
coord_cartesian(ylim = c(lower, upper))

enter image description here

关于r - 使用 geom_segment 指示 geom_errorbar 超出 log10 比例限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55554645/

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