R:ggplot 在 2x2 阶乘实验中填充一个因素

R: ggplot fill one factor in a 2x2 factorial experiment

我 运行 对几种不同植物物种进行 2x2 析因实验。我花了很多时间正确地策划这一切。

虚拟数据:

Data <- data.frame(
species = rep(letters[1:4], each = 4),
F1 = rep(letters[25:26], times = 8), 
F2 = rep(letters[11:12], each = 2, times = 4),
mean = runif(16, min=0, max=1),
se = (runif(16, min=0, max=1))/10)

我想要 X 轴上的物种名称,以及 4 个单独的点(+ SE 条),每个因子 2 个。一个因素将被填充或为空,另一个将是这是我到目前为止所得到的:

pd <- position_dodge(0.5)
ggplot(Data, aes(species, mean, fill = factor(F1), shape = factor(F2))) +
geom_point(size = 3, position = pd) +
geom_errorbar(aes(ymin=mean-se, ymax=mean+se), position = pd)

然而,这实际上并不是使因子 1 成为填充或未填充的形状。我跟着 mtcars 中的几个例子一起工作,我已经很好地工作了。这里出了什么问题?

就其价值而言,颜色效果很好,但我需要填充或清空,看来我使用的填充有误?

fill 美学用于用颜色填充条形图。积分,是"solid"还是不是。

我不知道有没有一种一步解决方案可以通过一个因素来构建一个点是否可靠的情节。不过,在那里建造这样的地块并不太难。

让我们开始构建 Data

library(ggplot2)

Data <- data.frame(species = rep(letters[1:4], each = 4),
                   F1      = rep(letters[25:26], times = 8), 
                   F2      = rep(letters[11:12], each = 2, times = 4),
                   mean    = runif(16, min=0, max=1),
                   se      = (runif(16, min=0, max=1))/10)

Data 添加一列,合并 F1F2。您可以使用 interaction() 函数,但我将使用 pastepaste0(...) 相当于 paste(..., sep = ""))来构建列并将其设置为 factor .

Data$F1F2 <- factor(with(Data, paste0("F1 = ", F1, "; F2 = ", F2)))
levels(Data$F1F2)

现在,在 ggplot 对象中使用 scale_shape_manual 将特定点字符映射到 Data$F1F2 的级别。本例中点字符c(1, 2, 16, 17)分别对应非实心圆、非实心三角形、实心圆、实心三角形。

pd <- position_dodge(0.5)
ggplot(Data) +
  aes(species, mean, color = species, shape = F1F2) +
  geom_point(size = 3, position = pd) +
  geom_errorbar(aes(ymin = mean - se, ymax = mean + se), position = pd) +
  scale_shape_manual(name = "Factors",
                     values = c(1, 2, 16, 17))

生成的图形如下。我添加了颜色美感来帮助我查看 species.

的分组