使用ggplot2从两个不同的数据帧创建密度图

时间:2014-03-24 03:03:28

标签: r plot ggplot2 density-plot

我的目标是比较各种社会经济因素(如多年收入)的分布情况,以了解人口在特定地区的演变情况,例如5年多。这方面的主要数据来自Public Use Microdata Sample。我使用R + ggplot2作为我的首选工具。

在比较两年的数据(2005年和2010年)时,我有两个数据框hh2005hh2010,其中包含两年的家庭数据。两年的收入数据存储在两个数据框中的变量hincp中。使用ggplot2我将创建个别年份的密度图,如下所示(2010年的例子):

    p1 <- ggplot(data = hh2010, aes(x=hincp))+
      geom_density()+
      labs(title = "Distribution of income for 2010")+
      labs(y="Density")+
      labs(x="Household Income")
    p1 

如何在此图上叠加2005年的密度?我无法理解为data已将hh2010视为{{1}}我不知道如何继续。我应该从一开始就以一种根本不同的方式处理数据吗?

2 个答案:

答案 0 :(得分:10)

您可以将data个参数传递给各个geoms,因此您应该能够将第二个密度添加为这样的新geom:

p1 <- ggplot(data = hh2010, aes(x=hincp))+
  geom_density() +
  # Change the fill colour to differentiate it
  geom_density(data=hh2005, fill="purple") +
  labs(title = "Distribution of income for 2010")+
  labs(y="Density")+
  labs(x="Household Income")

答案 1 :(得分:1)

这就是我解决问题的方法:

  1. 使用感兴趣的变量(在本例中为年份)标记每个数据框
  2. 合并两个数据集
  3. 更新ggplot函数中的'fill'美学
  4. 例如:

    # tag each data frame with the year^
    hh2005$year <- as.factor(2005)
    hh2010$year <- as.factor(2010)
    
    # merge the two data sets
    d <- rbind(hh2005, hh2010)
    d$year <- as.factor(d$year)
    
    # update the aesthetic
    p1 <- ggplot(data = d, aes(x=hincp, fill=year)) +
      geom_density(alpha=.5) +
      labs(title = "Distribution of income for 2005 and 2010") +
      labs(y="Density") +
      labs(x="Household Income")
    p1
    

    ^注意,当您使用因子时,'fill'参数似乎效果最好,因此我定义了年份。我还使用'alpha'参数设置重叠密度图的透明度。