R:如何根据具有不同列名的数据组合ggplots

Posted

技术标签:

【中文标题】R:如何根据具有不同列名的数据组合ggplots【英文标题】:R: how to combine ggplots basd on data with different column names 【发布时间】: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 那样添加它们,因为它是在之前已在此处发布的其他解决方案中完成的。

【问题讨论】:

【参考方案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))

【讨论】:

以上是关于R:如何根据具有不同列名的数据组合ggplots的主要内容,如果未能解决你的问题,请参考以下文章

R语言绘图——数据可视化ggplot2 介绍和主要的参数

使用 ggplot 在 R 中绘制组合 shapefile 时出现问题,未给出定义错误

1.ggplot2——简介

如何网格化面板图,使其在 R 中的 ggplot 中具有分类变量和不同的 x 变量

使用 combn 计算不重复的列名组合

如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?