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


79

我想将来自两个不同data.frames的两个ggplots组合到一个绘图中。在下面,您将找到代码。我想结合图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()

这必须很容易做到,但是以某种方式我无法使其正常工作。谢谢你的时间。


8
使用ggplot()语法,您可以指定用于每个单独层的数据,例如geom_step(data=df2)
baptiste'2

Answers:


78

正如Baptiste所说,您需要在geom级别指定data参数。要么

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

要么

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

31
@ naught101最外面的括号是使绘图在其分配所在的行中打印的一种技巧。您也可以将此技巧与其他变量一起使用。(my_variable <- 1:5)是的清洁版本my_variable <- 1:5; my_variable
Richie Cotton

59

对我而言,唯一可行的解​​决方案是在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')

代替

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

更多信息在这里


3

您可以使用此技巧仅使用qplot。使用内部变量$mapping。您甚至可以将colour =添加到绘图中,以便将其也放置在映射中,然后您的绘图将自动与图例和颜色组合。

cpu_metric2 <- qplot(y=Y2,x=X1) 

cpu_metric1 <- qplot(y=Y1, 
                    x=X1, 
                    xlab="Time", ylab="%") 

combined_cpu_plot <- cpu_metric1 + 
  geom_line() +
  geom_point(mapping=cpu_metric2$mapping)+
  geom_line(mapping=cpu_metric2$mapping)

如何使用这种方法放置两种颜色?
瓦格纳·豪尔赫

1
@WagnerJorge尝试读取qplot文档并在初始化cpu_metric2时添加颜色,例如qplot(y=..., x=..., colour=...),然后在内部添加颜色geom_line(mapping..., colour=...)
Alexander.Iljushkin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.