【问题标题】:R: how to combine ggplots basd on data with different column namesR:如何根据具有不同列名的数据组合ggplots
【发布时间】:2022-01-13 17:27:05
【问题描述】:

下面的两个 ggplots 单独工作,但我想将它们组合到一个图例中,其中 df2 中的行的 Group 变量出现在图例中。

library(ggplot2)
df1 <- data.frame(x = 1:10, y = 1:10)
df2 <- data.frame(x = rep(1:10,2), 
        y = c(seq(1,2,length.out = 10),
        seq(5,6,length.out = 10)), 
        Group = c(rep("A",10),rep("B",10))          
        )

p1 <- ggplot(data = df1, aes(x = x, y = y)) + 
geom_point() 

p2<- ggplot(data = df2, aes(x = x, y = y,
group = Group, color = Group)) + 
geom_line() 

问题是由 2 个数据框具有不同的列名引起的。因此,我无法生成 2 个图并像 p1 + p2 那样添加它们,因为它是在之前已在此处发布的其他解决方案中完成的。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    首先,在ggplot2 中,每一层都有自己的本地data 参数,即您可以将不同的数据集传递给每一层。如果您没有为图层设置data 参数,它将简单地继承ggplot()(如果有)中设置的全局数据集,即您可以通过将+ geom_line(data = df2, aes(group = Group, color = Group)) 添加到您的第一个图来将您的图合并为一个。

    其次,如果您的数据集有不同的列名,那也没什么大不了的。与data 参数一样,每一层都有自己的(本地)美学集。如果未设置,图层将继承ggplot() 中设置的全局美学,即使用不同的列名,您只需告诉哪些列应映射到每层的美学上。

    稍微更改了您的示例数据:

    library(ggplot2)
    df1 <- data.frame(x1 = 1:10, y1 = 1:10)
    df2 <- data.frame(x2 = rep(1:10,2), 
                      y2 = c(seq(1,2,length.out = 10),
                            seq(5,6,length.out = 10)), 
                      Group = c(rep("A",10),rep("B",10))          
    )
    
    ggplot(data = df1, aes(x = x1, y = y1)) + 
      geom_point() +
      geom_line(data = df2, aes(x = x2, y = y2, group = Group, color = Group))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 2021-01-16
      相关资源
      最近更新 更多