R ggplot2使用多变量facet_grid时合并重复的facet标签
解决方案
方法1:使用ggh4x包的嵌套分面功能(最简便)
ggh4x包的facet_nested()可以自动识别分层分组逻辑,合并上层分组的标签,无需额外手动调整样式,修改后代码如下:
library(ggplot2) library(dplyr) library(ggh4x) # 数据处理逻辑和原有代码一致,新增.groups参数避免分组警告 df <- diamonds %>% group_by(cut, color, clarity) %>% filter(cut %in% c("Fair","Good","Very Good") & clarity %in% c("SI1","SI2","VS1","VS2") & color %in% c("D","E","F")) %>% summarise(meanprice = mean(price), .groups = "drop") # 仅需要替换分面函数即可实现需求 ggplot(df, aes(y=color, x = meanprice)) + geom_bar(stat = "identity") + facet_nested(rows = cut + clarity ~.)
运行后会自动将同一个cut值对应的所有分面的标签合并,在侧边统一显示一次,不会出现重复标签,也不会产生多余留白,分层逻辑清晰。
方法2:ggplot2原生方案(无需安装额外包)
如果不想引入第三方扩展包,也可以通过labeller参数过滤重复标签实现效果,代码如下:
ggplot(df, aes(y=color, x = meanprice)) + geom_bar(stat = "identity") + facet_grid(rows = cut + clarity ~., labeller = labeller( .multi_line = FALSE, cut = ~ifelse(duplicated(.x), "", .x) )) + theme(strip.text.y.right = element_text(angle = 0))
该方案通过判断重复的cut值,将重复出现的标签替换为空,同样能实现每个cut值仅展示一次的效果。
内容的提问来源于stack exchange,提问作者Taren Sanders
相关产品推荐
相关产品推荐

