【问题标题】:R ggplot geom_point overlay from 2 data frames, differentiated by color, subset by idR ggplot geom_point 覆盖 2 个数据帧,按颜色区分,按 id 子集
【发布时间】:2020-05-14 06:41:59
【问题描述】:

我有两个具有相同行和列的数据框,DataMasterIMPSAVG,我正在尝试创建一系列组合的叠加二维散点图(由国家“ID”和变量列组成的子集)和观察结果从 ggplot 中按颜色区分的两个数据集。下面的代码不起作用,但可以看出我的目标是什么(acctm 是变量,ARG 是本例中的国家/地区)。

ggplot() + 
  geom_point(data=DataMaster, aes(x="Year", y="acctm"), subset = .(Country %in% c("ARG")), shape=21, color= "red") +
  geom_point(data=IMPSAVG, aes(x="Year", y="acctm"), subset = .(Country %in% c("ARG")), shape=21, color= "blue")

虽然只是让上述工作将非常感激,但循环为在两个数据集中找到的列 Country 中的所有唯一国家/地区 ID(也由向量 CountryList$Country 指定)创建此变量的单独图将是惊人的。谢谢!

【问题讨论】:

  • 由于无法运行您的代码(没有您的数据)或查看任何输出,我猜您可以将两个数据集行绑定在一起,并用一列显示哪个数据集是来自,然后将其分配给颜色。这将更适合 ggplot 设计的工作方式。你也不需要列名周围的字符串,我不确定subset 参数来自哪里

标签: r loops ggplot2 subset


【解决方案1】:

如果没有可重现的数据集示例,就很难确定您在寻找什么。

但是,使用这些假数据集:

df1 <- data.frame(Country = c("A","A","A","B","B"),
                  Year = 2010:2014,
                  Value = sample(1:100,5))
df2 <- data.frame(Country = c("A","A","A","B","B"),
                  Year = 2010:2014,
                  Value = sample(1:100,5))

1) 不加入数据集的绘图(不是最合适的)

您不必绝对组装数据框来绘制它们,但是这会使事情变得有点困难(尤其是如果您想自定义多个参数)。 在这里你可以做:

library(ggplot2)
ggplot()+
  geom_point(data = df1, aes(x = Year, y = Value, color = "blue"), shape = 21)+
  geom_point(data = df2, aes(x = Year, y = Value, color = "red"), shape = 21, show.legend = TRUE)+
  scale_color_manual(values = c("blue","red"), labels = c("df1","df2"), name = "")

2) 组装两个数据帧(最好的方法)

但是,如果您将两个数据帧组合起来会容易得多(ggplot2 旨在处理较长格式的数据帧)。

所以,在这里,你可以这样做:

df1$Dataset = "DF1"
df2$Dataset = "DF2"
DF <- rbind(df1,df2)

   Country Year Value Dataset
1        A 2010    66     DF1
2        A 2011    64     DF1
3        A 2012    40     DF1
4        B 2013    58     DF1
5        B 2014    20     DF1
6        A 2010    78     DF2
7        A 2011    25     DF2
8        A 2012    71     DF2
9        B 2013    40     DF2
10       B 2014    61     DF2

现在,您可以像这样简单地绘制它,这样更简洁:

library(ggplot2)
ggplot(DF, aes(x = Year, y = Value, color = Dataset))+
  geom_point(shape = 21)

3) 子集数据框

要仅绘制数据框的子集,从组装的数据框 DF 开始,您可以简单地执行以下操作:

library(ggplot2)
ggplot(subset(DF, Country =="A"), aes(x = Year, y = Value, color = Dataset))+
  geom_point(shape = 21)

它回答了你的问题吗?

【讨论】:

    【解决方案2】:

    我认为您需要创建一个新的数据框,它将这两个数据框和您感兴趣的国家/地区的子集结合起来。您可以使用rbind 将两者结合起来,您还应该为示例添加一列,指示哪个它们来自的数据框,以便您稍后可以在aes(..., color = new_column) 中使用它。

    【讨论】:

      【解决方案3】:

      只是为了补充 dc37 的出色写作,这里是将一个数据帧打印在另一个数据帧之上的技巧

      ggplot(subset(DF, Country =="A"), aes(x = Year, y = Value, color = Dataset)) +
        geom_point(shape = 21, na.rm = T) +
        geom_point(data = subset(DF, Dataset == DF1 & Country == "A"),
           aes(x = Year, y = compi, color = E), shape = 21, na.rm = T)
      

      其中“DF1”是您要绘制在顶部的数据框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2023-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多