使用 stat_pointinterval() 时独立更改绘图元素大小

Independently changing the plot element sizes when using stat_pointinterval()

我一直在尝试使用 tidybayes 包中的 stat_pointinterval() 函数来创建一些图形,但 运行 遇到了一些自定义外观的问题。我在下面添加了我正在使用的代码示例以及输出图形的示例。我想做的是找到一种方法来独立更改点的大小和每个间隔。到目前为止,我已经能够改变点的大小,但我只能找到一种方法来改变整条线的宽度,而不是独立地改变每个线段的宽度(见下面的第二个图)。任何帮助都会很棒,或者如果有人对如何创建这样的情节有更好的想法。谢谢!

library(tidyverse)
library(tidybayes)

treat <- rep(c("Control", "T1", "T2", "T4"),100)
est <- rnorm(400,0,1)

df <- as.data.frame(cbind(treat, est)) %>% 
        mutate(treat = as.factor(treat),
               est = as.numeric(est))


ggplot(data = df, aes(x=treat, y=est)) +
  stat_pointinterval()

ggplot(data = df, aes(x=treat, y=est)) +
  stat_pointinterval(.width = c(0.5,0.95),
                     size = 10)

独立设置点和段大小的一种方法是通过 point_size 参数设置点大小,并通过 [=14= 的 range 参数设置段大小] 默认值是 range=c(1, 6):

library(tidyverse)
library(tidybayes)

set.seed(123)

treat <- rep(c("Control", "T1", "T2", "T4"), 100)
est <- rnorm(400, 0, 1)

df <- as.data.frame(cbind(treat, est)) %>%
  mutate(
    treat = as.factor(treat),
    est = as.numeric(est)
  )

ggplot(data = df, aes(x = treat, y = est)) +
  stat_pointinterval(
    .width = c(0.5, 0.95),
    point_size = 10
  ) +
  scale_size_continuous(range = c(5, 20))

第二个选项是使用 after_stat 映射 factor(.width)(其中 factor 转换为离散变量)到 size aes 并通过以下方式设置大小scale_size_manual:

ggplot(data = df, aes(x = treat, y = est)) +
  stat_pointinterval(
    aes(size = after_stat(factor(.width))),
    .width = c(0.5, 0.95),
    point_size = 10
  ) +
  scale_size_manual(values = c("0.5" = 10, "0.95" = 5))