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

如何使用geom_waffle实现华夫图从上到下填充?

解决华夫图自上而下从左到右填充的问题

要实现从顶部(类别C)开始自上而下、从左到右填充的华夫图,需要调整类别填充顺序和坐标轴方向,具体步骤如下:

解决方案代码

library(waffle)
library(tidyverse)

my_data <- data.frame(category = c('A', 'B', 'C'),
                   count = c(20, 15, 40),
                   stringsAsFactors=TRUE) %>%
  # 重排因子水平,让C成为第一个被填充的类别
  mutate(category = fct_relevel(category, "C", "B", "A"))

my_data %>%
  ggplot(aes(fill = category, values = count)) +
  geom_waffle(
    n_rows = 10,
    size = 0.33,
    colour = "white",
    flip = TRUE,
    make_proportional = TRUE,
    na.rm = TRUE
  ) +
  # 反转y轴,让先填充的C显示在顶部
  scale_y_discrete(limits = rev) +
  # 同步调整图例顺序,保持和填充逻辑一致
  scale_fill_discrete(limits = c("C", "B", "A"))

原理说明

  1. 调整填充顺序:geom_waffle 默认按照 category 的因子水平顺序填充方块,原数据的因子顺序是A→B→C,因此会从底部开始先画A。通过 fct_relevel 将C设为第一个因子水平,让填充顺序变为C→B→A。
  2. 反转坐标轴方向:由于使用了 flip=TRUE,华夫图的y轴默认是从下到上排列行号,先填充的C会出现在底部。添加 scale_y_discrete(limits = rev) 反转y轴,使行号从上到下排列,C的方块就会显示在顶部,且从左到右依次填充。
  3. 同步图例顺序:调整 scale_fill_discrete 的 limits 参数,让图例顺序和填充顺序一致,避免视觉混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:47:12