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

R语言ggplot柱状图问题:移除无数据的灰色空条形

解决Q1调查对比柱状图中空条形问题

问题场景

绘制Q1初始调查与跟进调查的对比柱状图时,Excel数据显示Q1初始调查的Score=1选项有1个计数,但跟进调查该选项计数为0,不过ggplot生成的图表中Score=1位置仍显示跟进调查对应的空灰色条形,需要移除这个空条形以准确体现该选项无投票。

解决方案

核心思路是提前统计每个Type和Score的频数与频率,过滤掉计数为0的分组后再绘图,避免ggplot自动生成空条形。

修改后的完整代码

library(readxl)
library(tidyverse)

# 读取数据并筛选目标调查类型
DATA <- read_excel("C:/Users/dsm/OneDrive/Desktop/Poole Research/DATA.xlsx", sheet = "Sheet2")
Newpractice <- dplyr::filter(DATA, Type %in% c("Q1 Follow Up", "Q1 Initial"))

# 统计分组频数,计算类型内频率,过滤空计数
freq_data <- Newpractice %>%
  count(Type, Score, name = "n") %>%
  group_by(Type) %>%
  mutate(frequency = n / sum(n)) %>%
  ungroup() %>%
  filter(n > 0)

# 绘制柱状图
ggplot(freq_data, aes(x = Score, y = frequency, fill = Type)) +
  geom_col(position = "dodge") +
  scale_fill_grey() +
  ylab("Frequency")

代码说明

  • count(Type, Score):统计每种调查类型下各分数的出现次数,跟进调查中无数据的Score=1不会被纳入结果
  • group_by(Type) %>% mutate(frequency = n / sum(n)):按调查类型分组计算频率,保证频率是各类型内部的占比
  • filter(n > 0):直接移除计数为0的分组,从根源避免空条形生成
  • geom_col:替换原geom_bar,因为我们已经提前计算好y轴的频率值,geom_col更适合展示预汇总的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:55:16