【发布时间】:2016-04-23 07:50:26
【问题描述】:
我确信答案很简单,但目前我还没有意识到。我想使用stat_summary() 制作一个折线图,在每个 x 轴刻度(代表一个单独的时间点)处每个组(代表一个实验条件)具有不同的形状。
这是数据
set.seed(124)
ID <- rep(1:12, times = 3)
Group <- rep(c("A", "B", "C"), times = 12)
score <- rnorm(36, 25, 3)
session <- rep(c("s1","s2", "s3"), each = 12)
df <- data.frame(ID, Group, session, score)
现在我可以通过为每个时间点制作一张均值表来实现这一目标。像这样。
gMeans <- aggregate(score ~ session + Group, data = df, mean)
然后像这样绘制它。
pMeans <- ggplot(data = gMeans, aes(x = session, y = score, group = Group, shape = Group)) +
geom_line(aes(linetype = Group), size = 1) +
geom_point(size = 5, fill = "white") +
scale_color_hue(name = "Group", l = 30) +
scale_shape_manual(name = "Group", values = c(23,22, 21)) +
scale_linetype_discrete(name = "Group") +
theme_bw()
pMeans
但是,我希望能够跳过必须使用stat_summary() 制作均值表的步骤。我可以得到一个具有不同线型的类似图表,但我不知道如何在每个轴刻度上为每个组获取不同的形状。我尝试了下面的代码以及geom_point() 和geom_line() 的许多不同排列,但无济于事。如何更改下面的代码以获得看起来像从上面的代码派生的输出?
pline <- ggplot(df, aes(x=session, y=score, group = Group, shape = Group)) +
stat_summary(fun.y="mean", geom="line", size=1.1, aes(linetype=Group, shape = Group)) +
scale_shape_manual(values=c(1:3))
pline
【问题讨论】:
-
一种快速的方法是将函数添加到您的 _point 和 _line 调用中:
ggplot(data = df, aes(x = session, y = score, group = Group, shape = Group)) + geom_line(aes(linetype = Group), size = 1, stat="summary", fun.y=mean) + geom_point(size = 5, fill = "white", stat="summary", fun.y=mean) -
感谢@user20650 的提示。这很有帮助,它添加了形状,但尽管在您的
geom_point图层中调用了fill = white,但形状还是带有黑色填充。知道为什么会这样吗? -
你需要像你的例子一样添加 scale_shape (
scale_shape_manual(name = "Group", values = c(23,22, 21))) -
我希望 所有 的 SO 问题都如此彻底、格式良好,并且付出了同样的努力来制作可重现的示例。这太棒了@llewmills。
-
再次感谢 user20650。感谢您注意到@hrbrmstr。我试图让可能有同样问题的其他人理解它。我也很早就发现它增加了我得到答案的机会:)