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

R语言绘制镜像直方图:处理NA值且不丢失var2全部有效数据

镜像直方图缺失值适配方案

核心思路是断开两个图层的数据源依赖,给每个直方图单独指定数据源,避免var1的NA过滤逻辑影响var2的全量数据计算,不需要修改原始数据的NA值。

依赖包准备

# 未安装对应包可先执行安装
# install.packages("ggplot2")
# install.packages("hrbrthemes")
library(ggplot2)
library(hrbrthemes)

修正后绘图代码

p <- ggplot() +
  # var1图层仅使用var1非空的行,保留全部100个有效值
  geom_histogram(data = data[!is.na(data$var1), ], 
                 aes(x = var1, y = ..density..), 
                 fill="#69b3a2", bins = 30) +
  geom_label(aes(x=4.5, y=0.25, label="variable1"), color="#69b3a2") +
  # var2图层使用全量数据集,1000条数据全部参与计算
  geom_histogram(data = data, 
                 aes(x = var2, y = -..density..), 
                 fill= "#404080", bins = 30) +
  geom_label(aes(x=4.5, y=-0.25, label="variable2"), color="#404080") +
  theme_ipsum() +
  xlab("value of x")

p

代码中的bins参数可根据需要调整直方图的柱数,获得更符合预期的视觉效果。

原代码问题说明

之前的代码将含NA的完整数据集作为全局数据源传入ggplot,图层默认继承全局数据时,会自动剔除所有存在任意变量缺失的行,导致var2的直方图也仅用到了和var1非NA匹配的100条数据。修改后每个图层单独指定数据源,互不影响:

  • var1的直方图仅过滤自身的NA值,全部有效值参与密度计算
  • var2的直方图使用全量数据,不受var1的NA干扰
  • 全程没有修改原始数据的NA值,最终得到的分布形态和两个变量单独绘图的结果完全一致

内容的提问来源于stack exchange,提问作者Ruser-lab9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:04