我对几种不同的植物物种进行了 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)
结合 F1
和 F2
向 Data
添加一列。您可以使用 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))
生成的图形如下所示。我添加了颜色美感来帮助我查看按物种
进行的分组。
关于R:ggplot 在 2x2 阶乘实验中填充一个因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043625/