在R中使用ggplot2重叠两个图表

9

有两个数据框 - df1df2,我需要使用ggplot2创建线图并在同一图表上显示。

df1

 x   y 
2   30
4   25
6   20
8   15

df2

 x   y 
2   12
4   16
6   20
8   24

绘制第一个数据框时,

p1 <- ggplot( df1, aes(x = df1[,1] , y = log(df1[,2]) ) )
p1 <- p1 + geom_line(aes(y = log(df1[,2])))
p1

如何在数据框df2上将相同的绘图叠加到同一图形中?
1个回答

28

如果你重新定义了data,那么会改变 geom 层数据源的位置。 ggplot 总是会查找初始化调用中的 aesthetic mappings 并尝试继承它们,所以你不需要重新定义 aes(),除非你想要改变/添加一个映射。

此外,无需使用 df[,2] 语法,只要你设置了 data = df1ggplot 就已经在查找 df1 内部了。

df1 <- data.frame(x = seq(2, 8, by = 2),
                  y = seq(30, 15, by = -5))
df2 <- data.frame(x = seq(2, 8, by = 2),
                  y = seq(12, 24, by = 4))

ggplot(df1, aes(x, log(y))) + 
   geom_line() +
   geom_line(data = df2, color = "red") # re-define data and overwrite top layer inheritance

enter image description here


在第二个geom_line()中,我们可以使用mapping=aes(...)吗?但是当我这样做时,由于某种原因我遇到了以下错误:"Error in geom_point(): ! mapping must be created by aes() Run rlang::last_trace() to see where the error occurred." - Rasputin
1
如果df2$y2存在(在这个示例数据中不存在),你可以使用+ geom_list(data = df2, aes(y = y2))。也许你得到的错误是关于该列在你的data=中不存在。 - Nate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接