我想geom_smooth在单个 ggplot2 图表中使用多个图层。当我尝试这样做时,配色方案就搞砸了。这是一个演示正在发生的事情的示例。
我们构建一个我们想要可视化的简单数据框。
df = data.frame(x = c("a", "b", "c"),
y1 = seq(1, 3),
y1_upr = seq(2, 4),
y1_lwr = seq(0, 2),
y2 = seq(2, 4),
y2_upr = seq(2.5, 4.5),
y2_lwr = seq(1.5, 3.5))
Run Code Online (Sandbox Code Playgroud)
我们可以轻松地可视化 y1 和 y2。
plot_obj = ggplot(data = df, aes(x = x, group = 1)) +
geom_line(aes(y = y1, colour = "y1")) +
geom_line(aes(y = y2, colour = "y2")) +
scale_colour_manual("", breaks = c("y1", "y2"), values = c("blue", "red"))
plot_obj
Run Code Online (Sandbox Code Playgroud)
如果我们添加 1 geom_smooth,行为仍然符合预期。
plot_obj +
geom_smooth(aes(y = y1, ymin = y1_lwr, ymax = y1_upr), stat="identity", fill="blue", alpha=0.2)
Run Code Online (Sandbox Code Playgroud)
plot_obj +
geom_smooth(aes(y = y1, ymin = y1_lwr, ymax = y1_upr), stat="identity", fill="blue", alpha=0.2) +
geom_smooth(aes(y = y2, ymin = y2_lwr, ymax = y2_upr), stat="identity", fill="red", alpha=0.2)
Run Code Online (Sandbox Code Playgroud)
请注意,最后一张图表中顶线不再是红色。为什么会发生这种情况以及如何解决?谢谢你!
当然,重塑数据集会让事情变得更容易,并且是推荐的方法。但是,如果您想继续使用单独的图层:
由于您尚未映射colorfor geom_smooth,因此它使用默认颜色蓝色来绘制平滑线。如果您只想要丝带,请使用geom_ribbon丝带。
ggplot(data = df, aes(x = x, group = 1)) +
geom_line(aes(y = y1, colour = "y1")) +
geom_line(aes(y = y2, colour = "y2")) +
scale_colour_manual("", breaks = c("y1", "y2"), values = c("blue", "red")) +
geom_ribbon(aes(ymin = y1_lwr, ymax = y1_upr), stat="identity", fill="blue", alpha=0.2) +
geom_ribbon(aes(ymin = y2_lwr, ymax = y2_upr), stat="identity", fill="red", alpha=0.2)
Run Code Online (Sandbox Code Playgroud)
否则,您需要为 内的每个平滑层映射颜色aes,或手动将它们设置为 外的红色和蓝色或 NA aes。
ggplot(data = df, aes(x = x, group = 1)) +
geom_line(aes(y = y1, colour = "y1")) +
geom_line(aes(y = y2, colour = "y2")) +
scale_colour_manual("", breaks = c("y1", "y2"), values = c("blue", "red")) +
geom_smooth(aes(y = y1, ymin = y1_lwr, ymax = y1_upr, colour = "y1"),
stat="identity", fill="blue", alpha=0.2) +
geom_smooth(aes(y = y2, ymin = y2_lwr, ymax = y2_upr, colour = "y2"),
stat="identity", fill="red", alpha=0.2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21816 次 |
| 最近记录: |