You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:50:30