ggplot结合了来自不同data.frames的两个图

jer*_*n81 65 r ggplot2

我想将两个ggplots从两个不同的data.frames组合成一个图.您将在下面找到代码.我想将情节1和2或情节3和4结合起来.

df1 <- data.frame(p=c(10,8,7,3,2,6,7,8),
             v=c(100,300,150,400,450,250,150,400))
df2 <- data.frame(p=c(10,8,6,4), v=c(150,250,350,400))

plot1 <- qplot(df1$v, df1$p)
plot2 <- qplot(df2$v, df2$p, geom="step")

plot3 <- ggplot(df1, aes(v, p)) + geom_point()
plot4 <- ggplot(df2, aes(v, p)) + geom_step()
Run Code Online (Sandbox Code Playgroud)

这一定非常容易,但不知怎的,我无法让它发挥作用.谢谢你的时间.

Ric*_*ton 68

正如Baptiste所说,你需要在geom级别指定数据参数.或

#df1 is the default dataset for all geoms
(plot1 <- ggplot(df1, aes(v, p)) + 
    geom_point() +
    geom_step(data = df2)
)
Run Code Online (Sandbox Code Playgroud)

要么

#No default; data explicitly specified for each geom
(plot2 <- ggplot(NULL, aes(v, p)) + 
      geom_point(data = df1) +
      geom_step(data = df2)
)
Run Code Online (Sandbox Code Playgroud)

  • @naught101最外面的括号是一个技巧,可以使绘图与其赋值位于同一行.您也可以将此技巧与其他变量一起使用.`(my_variable < - 1:5)`是`my_variable < - 1:5的清洁版; my_variable`. (29认同)

And*_*ies 48

对我来说唯一可行的解​​决方案是在geom_line中定义数据对象而不是基础对象ggplot.

像这样:

ggplot() + 
geom_line(data=Data1, aes(x=A, y=B), color='green') + 
geom_line(data=Data2, aes(x=C, y=D), color='red')
Run Code Online (Sandbox Code Playgroud)

代替

ggplot(data=Data1, aes(x=A, y=B), color='green') + 
geom_line() + 
geom_line(data=Data2, aes(x=C, y=D), color='red')
Run Code Online (Sandbox Code Playgroud)

更多信息在这里