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

如何用ggplot实现多布尔变量状态的可视化(替代naniar)

用ggplot可视化布尔变量状态

需求:对多个布尔变量的状态进行可视化,原本通过naniar库实现了临时方案,但属于滥用库且标签显示不正确,希望用ggplot实现相同效果,以enabled(TRUE/FALSE)作为颜色变量。
原临时方案代码:

library(tidyverse)
library(naniar)
a <- c(TRUE, FALSE, TRUE,FALSE)
b <- c(FALSE, FALSE, TRUE,FALSE)
c <- c(FALSE, TRUE, TRUE,FALSE)

data.frame(a,b,c) %>%
  mutate_all(~ if_else(., NA, FALSE)) %>%
  vis_miss()

解决方案

1. 数据预处理

先把宽格式的数据转成ggplot更友好的长格式,同时加上行号标记,方便对应每一行观测:

library(tidyverse)

# 原始布尔变量
a <- c(TRUE, FALSE, TRUE, FALSE)
b <- c(FALSE, FALSE, TRUE, FALSE)
c <- c(FALSE, TRUE, TRUE, FALSE)

# 转换为长格式并添加行号
df <- data.frame(a, b, c) %>%
  mutate(row_id = row_number()) %>%
  pivot_longer(cols = -row_id, names_to = "variable", values_to = "enabled")

2. ggplot绘图实现

用geom_tile()绘制矩阵式的可视化,完全匹配你要的效果:

ggplot(df, aes(x = variable, y = row_id, fill = enabled)) +
  geom_tile(color = "white", size = 1) +  # 白色边框分隔单元格
  scale_y_reverse() +  # 让第一行观测显示在顶部,和vis_miss布局一致
  # 自定义颜色:FALSE用浅灰,TRUE用红色(和原vis_miss效果近似)
  scale_fill_manual(values = c("FALSE" = "#cccccc", "TRUE" = "#ff4c4c")) +
  labs(x = "变量", y = "观测行", fill = "Enabled状态") +
  theme_minimal() +
  theme(
    axis.text = element_text(size = 10),
    legend.position = "bottom"
  )

效果说明

  • 每个单元格对应一行观测的某个变量状态,浅灰色代表FALSE,红色代表TRUE
  • 变量名和行号标签清晰显示,解决了原方案标签错误的问题
  • 完全用ggplot实现,不存在滥用naniar库的问题

内容的提问来源于stack exchange,提问作者94621

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:43:12