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

ggplot堆叠面积图空白间隙问题及替代图表咨询

问题解决与可视化建议

一、堆叠面积图空白间隙问题分析与解决

核心原因

从提供的数据示例可以看到,部分月份(如2012.16666666667对应时段)缺少MoL类别的记录,ggplot绘制堆叠面积图时,缺失类别的数据会被视为序列中断,导致图表出现空白间隙。

验证有效的解决方法

通过tidyr::complete()函数补全所有月份下的所有类别记录,缺失值填充为0,同时先取消数据分组避免报错:

stackedgraph <- stackedgraph %>%
  ungroup() %>% 
  complete(month_year, directed_to_whom, fill = list(directed_to_whom_percentage = 0))

补全数据后重新绘图,空白间隙即可消除(修改后的图表已显示完整的堆叠区域)。

绘图代码优化(可选)

提前转换日期格式并优化主题设置,提升图表可读性:

# 提前处理日期格式
stackedgraph <- stackedgraph %>%
  mutate(date = as.Date(month_year))

ggplot(stackedgraph, aes(x = date, y = directed_to_whom_percentage)) +
  geom_area(aes(fill = directed_to_whom, group = directed_to_whom), position = 'stack') +
  scale_fill_manual(
    values = c(
      "MoL" = "lightgreen",
      "MoE" = "red",
      "Private employers" = "lightblue",
      "Non-critical" = "black"
    ),
    labels = c("劳工部", "教育部", "非关键部门", "私人雇主") # 可选:添加中文标签
  ) +
  scale_x_date(date_breaks = "months", date_labels = "%b-%y") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5),
    axis.title.x = element_blank(),
    axis.ticks.x = element_blank(),
    plot.title = element_text(size = 12, face = "bold") # 原标题字号过小,建议调整
  ) +
  labs(title = "月度分类占比堆叠面积图", y = "占比", fill = "指向对象")

二、其他可视化图表建议

针对这类月度分类占比时间序列数据,推荐以下几种可视化方式:

1. 分组折线图

适合展示每个类别占比随时间的变化趋势,清晰对比不同类别的波动差异:

ggplot(stackedgraph, aes(x = date, y = directed_to_whom_percentage, color = directed_to_whom)) +
  geom_line(linewidth = 1) +
  scale_color_manual(values = c("MoL" = "lightgreen", "MoE" = "red", "Private employers" = "lightblue", "Non-critical" = "black")) +
  scale_x_date(date_breaks = "months", date_labels = "%b-%y") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  labs(title = "月度分类占比趋势图", y = "占比", color = "指向对象")

2. 分组柱状图

  • 堆叠柱状图:与堆叠面积图逻辑一致,但更适合突出单月的占比结构;
  • 分组柱状图:直观对比同一月份下不同类别的占比高低:
# 分组柱状图示例
ggplot(stackedgraph, aes(x = date, y = directed_to_whom_percentage, fill = directed_to_whom)) +
  geom_col(position = "dodge", width = 20) + # 适配日期轴的宽度设置
  scale_fill_manual(values = c("MoL" = "lightgreen", "MoE" = "red", "Private employers" = "lightblue", "Non-critical" = "black")) +
  scale_x_date(date_breaks = "months", date_labels = "%b-%y") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  labs(title = "月度分类占比分组柱状图", y = "占比", fill = "指向对象")

3. 热力图

适合展示类别-月份的占比强度,快速识别高占比的时间-类别组合:

ggplot(stackedgraph, aes(x = date, y = directed_to_whom, fill = directed_to_whom_percentage)) +
  geom_tile(color = "white") +
  scale_fill_viridis_c(labels = scales::percent_format(accuracy = 1)) +
  scale_x_date(date_breaks = "months", date_labels = "%b-%y") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  labs(title = "月度分类占比热力图", fill = "占比")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:32:41