如何使用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"))
原理说明
- 调整填充顺序:
geom_waffle默认按照category的因子水平顺序填充方块,原数据的因子顺序是A→B→C,因此会从底部开始先画A。通过fct_relevel将C设为第一个因子水平,让填充顺序变为C→B→A。 - 反转坐标轴方向:由于使用了
flip=TRUE,华夫图的y轴默认是从下到上排列行号,先填充的C会出现在底部。添加scale_y_discrete(limits = rev)反转y轴,使行号从上到下排列,C的方块就会显示在顶部,且从左到右依次填充。 - 同步图例顺序:调整
scale_fill_discrete的limits参数,让图例顺序和填充顺序一致,避免视觉混淆。
内容的提问来源于stack exchange,提问作者Emily CLine
相关产品推荐
相关产品推荐

