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

时间:2017-07-11 20:06:59

标签: 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中的几个例子,我已经工作得很好。这里出了什么问题?

对于它的价值,颜色工作正常,但我需要它填充或空,所以似乎我可能使用填充错误?

1 个答案:

答案 0 :(得分:2)

fill美学用于填充颜色条。积分,是&#34;固体&#34;或不。

我不知道用一个因素确定点是否稳定来构建情节的一步解决方案。然而,建立这样的情节并不太难。

让我们从构建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)

DataF1 F2添加一列到interaction()。您可以使用paste函数,但我会使用paste0(...)paste(..., sep = "")相当于factor)来构建列并将其设置为{{1 }}

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查看分组。

enter image description here