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

Posted

技术标签:

【中文标题】使用 ggplot2 从两个不同的数据帧创建密度图【英文标题】:Creating density plots from two different data-frames using ggplot2 【发布时间】:2014-05-01 06:39:57 【问题描述】:

我的目标是比较各种社会经济因素(如收入)多年来的分布情况,以了解特定地区的人口在 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】:

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

    用感兴趣的变量(在本例中为年份)标记每个数据框 合并两个数据集 更新 ggplot 函数中的“填充”美学

例如:

# 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

^ 请注意,当您使用因子时,“填充”参数似乎效果最佳,因此我将年份定义为这样。我还使用 'alpha' 参数设置了重叠密度图的透明度。

【讨论】:

【参考方案2】:

您可以将 data 参数传递给单个几何图形,因此您应该能够像这样将第二个密度添加为新几何图形:

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")

【讨论】:

以上是关于使用 ggplot2 从两个不同的数据帧创建密度图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化2d密度图:可视化二维密度图并将两个二维密度图重叠起来Overlay two ggplot2 stat_density2d plots

ggplot2 圆形数据的密度

在ggplot2中强制密度图的颜色

用ggplot2绘制密度,x轴上没有线

R可视化ggplot2绘制重叠密度图(Overlay Density Plots)

ggplot2 密度与密度函数有何不同?