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

标签 r ggplot2 colors fill

我对几种不同的植物物种进行了 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 中的几个示例,这些示例运行良好。这里出了什么问题?

就其值(value)而言,颜色效果很好,但我需要将其填充或清空,所以看起来我可能使用了错误的填充?

最佳答案

fill 美学用于用颜色填充条。点是“实体”还是非“实体”。

我不知道如何一步解决方案来构建一个点是否可靠的绘图。不过, build 这样的地 block 并不是太困难。

让我们从构建数据开始

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)

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

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))

生成的图形如下所示。我添加了颜色美感来帮助我查看按物种进行的分组。

enter image description here

关于R:ggplot 在 2x2 阶乘实验中填充一个因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043625/

相关文章:

r - 循环遍历 R 中的数据帧列表并应用 if else 函数

r - 学习形式的优质 R 代码

r - 如何在所有方面保留或删除 geom_tile 的灰色边距?

在c中将图像的一个区域更改为 "color"

r - gsub 删除不需要的精度

r - 如果一组行不包含特定单词,则过滤 dplyr 链中的行

r - 使用 ggplot 命名图,由 lapply 循环

r - subset=.() 不能直接在 ggplot() 中调用

android - 黑透明和白透明有区别吗?

intellij-idea - IntelliJ IDEA 2017.3.4 - 更改注释颜色