如何在R中绘制按LowIncome分组的重叠透明加权直方图
解决方案
方法一:基础绘图系统叠加分组直方图
通过拆分调查设计子集,分别绘制并叠加,设置透明度实现重叠展示:
# 按LowIncome拆分调查设计 low_inc_design <- subset(nhanesDesign, LowIncome == TRUE) non_low_inc_design <- subset(nhanesDesign, LowIncome == FALSE) # 先绘制低收入组直方图,设置红色半透明 svyhist(~log10(INDFMIN2), design = low_inc_design, col = rgb(1, 0, 0, 0.5), # 最后一个参数为透明度(0-1) main = "加权log10(INDFMIN2)直方图(按收入分组)", xlab = "log10(INDFMIN2)", ylab = "密度") # 叠加非低收入组直方图,蓝色半透明 svyhist(~log10(INDFMIN2), design = non_low_inc_design, col = rgb(0, 0, 1, 0.5), add = TRUE) # 添加图例区分两组 legend("topright", legend = c("低收入", "非低收入"), fill = c(rgb(1,0,0,0.5), rgb(0,0,1,0.5)))
方法二:使用ggplot2绘制(更灵活)
先提取加权直方图的统计数据,再用ggplot2实现透明重叠效果:
library(ggplot2) # 提取两组的直方图统计数据(不直接绘图) low_hist_data <- svyhist(~log10(INDFMIN2), design = low_inc_design, plot = FALSE) non_low_hist_data <- svyhist(~log10(INDFMIN2), design = non_low_inc_design, plot = FALSE) # 整理为ggplot可用的数据框 low_df <- data.frame( x = low_hist_data$mids, density = low_hist_data$density, group = "低收入" ) non_low_df <- data.frame( x = non_low_hist_data$mids, density = non_low_hist_data$density, group = "非低收入" ) plot_df <- rbind(low_df, non_low_df) # 绘制透明重叠直方图 ggplot(plot_df, aes(x = x, y = density, fill = group)) + geom_col(position = "identity", alpha = 0.5) + # alpha控制透明度 labs(title = "加权log10(INDFMIN2)直方图(按收入分组)", x = "log10(INDFMIN2)", y = "密度") + scale_fill_manual(values = c("低收入" = "#ff4444", "非低收入" = "#4444ff")) + theme_minimal()
关键说明
rgb()函数或alpha参数控制透明度,取值0(完全透明)到1(完全不透明)- 基础绘图中用
add=TRUE实现图形叠加 - ggplot2方法需要先提取直方图数据,因为
svyhist无法直接对接ggplot2,但这种方式更便于自定义样式
内容的提问来源于stack exchange,提问作者Forklift17
相关产品推荐
相关产品推荐

