带有抖动条的箱线图 (ggplot2) 的错误消息

Errormessages for Boxplots with jitter strips (ggplot2)

我正在尝试使用来自网站 (https://z3tt.github.io/beyond-bar-and-box-plots/) 的代码制作带有抖动条的箱线图。该网站上的代码如下面的屏幕截图所示。

我不确定“g”代表什么以及它们是否指的是它们的数据框。到目前为止我的代码是这样的:

df %>%  
  geom_boxplot(aes(data = df, x = groupci, y = df$weight_v1_3, color = groupci, fill = groupci)) +
  scale_y_continuous(breaks = 1:9) +
  scale_color_manual(values = weight_v1_3, guide = "none") +
  scale_fill_manual(values = weight_v1_3, guide = "none")
df + 
  geom_boxplot(alpha = .5, size = 1.5, outlier.size = 5)

df  + 
  geom_boxplot
  (aes(fill = groupci, fill = after_scale(colorspace::lighten(fill, .7))),
    size = 1.5, outlier.shape = NA) +
  geom_jitter(width = .1, size = 7, alpha = .5)

错误消息说:映射必须由 aes() 和 is_reference(x, quote(expr = )) 中的错误创建:找不到对象 'weight_v1_3'。

我要描绘的数据中的变量称为“weight_v1_3”。我还想并排显示控制组和干预组的箱线图,类似于下面网站上的示例。最后,我什至想并排显示控制组和干预组,然后标记为 3 次访问,因此 3 对控制和干预在一张图表中用于一个变量,这里是权重。我认为这还没有包含在代码中。如果有人知道如何另外执行此操作,那就太棒了。

我只是使用网站上的相同缩放比例来查看它的外观,然后可能会对其进行更改。不幸的是我的代码还不能工作。有人有什么想法吗?提前致谢!

示例数据:

structure(list(pseudonym = c(1L, 2L, 4L, 5L, 6L, 7L, 3L, 8L, 
9L, 10L, 11L, 1L, 2L, 4L, 5L, 6L, 7L, 3L, 8L, 9L, 10L, 11L, 1L, 
2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), control.0.1. = c(0L, 0L, 0L, 
0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), intervention.0.1. = c(1L, 
1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), visit = c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), weight.V1.3 = c(60L, 
60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 59L, 59L, 59L, 
59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 57L, 57L, 57L, 57L, 57L, 
57L, 57L, 57L, 57L)), class = "data.frame", row.names = c(NA, 
-31L))

您的代码有很多问题和语法错误。仅举几例:

  1. ggplot 总是以 ggplot() 开头。 df %>% geom_boxplot(..) 将不起作用。

  2. 没有data审美。要告诉 ggplot2 使用哪个数据集,您必须将其传递给 data 参数,例如做 ggplot(data = df) 或做空 ggplot(df).

  3. scale_color_manual(values = weight_v1_3)也不行。您不必传递要为绘图着色的列名称(这是在 aes() 内完成的)。在 scale_color_manual 中指定要使用的颜色。

  4. 最后,您引用的代码中的 g 是一个 ggplot 对象,即您可以将 ggplot 对象分配给一个变量。然后向这个对象添加额外的图层。

  5. 在继续之前,我建议先学习 ggplot2 教程以获得基础知识,例如您引用的 post 的作者有一个很好的教程:https://www.cedricscherer.com/2019/08/05/a-ggplot2-tutorial-for-beautiful-plotting-in-r/

注意:我还做了一些小的数据整理步骤,例如重命名列和添加 groupci 列。

library(ggplot2)
library(dplyr)

df <- df %>% 
  rename_with(~ gsub("\.", "_", tolower(.x))) %>% 
  mutate(groupci = ifelse(control_0_1_ == 1, "control", "intervention"))

pal <- c("red", "blue")

g <- ggplot(df, aes(x = groupci, y = weight_v1_3)) +
  geom_boxplot(aes(fill = groupci, fill = after_scale(colorspace::lighten(fill, .7))), alpha = .5, size = 1.5, outlier.size = 5)

g + 
  geom_jitter(aes(color = groupci), width = .1, size = 7, alpha = .5) +
  scale_y_continuous(breaks = 1:9) +
  scale_color_manual(values = pal, guide = "none") +
  scale_fill_manual(values = pal, guide = "none")