R语言ggplot2如何将facet_wrap分面标题前置避免被饼图遮挡
解决方案
你遇到的遮挡问题是theme_void默认取消了分面标题的底部留白,饼图的极坐标绘图区域直接顶到了标题文本位置,带下行延伸的字母(g、q)下半部分就会被遮挡。最简单的解决方法是调整分面文本的底部边距,给标题留出足够的显示空间:
只需在你原代码的theme()配置中新增一行strip.text.x = element_text(margin = margin(b = 6))即可,参数b对应文本底部的留白大小,可根据实际显示效果调整数值。修改后的完整代码如下:
library(ggplot2) Testing <- data.frame( Letter = c("A", "B", "C", "q", "g"), Category = c("Category A", "Category B", "Category A", "Category B", "Category A", "Category B", "Category A", "Category B", "Category A", "Category B"), Count = c(58, 16, 20, 42, 37, 42, 84, 80, 58, 63), RawN = c("n = 100", "n = 200", "n = 300", "n = 400", "n = 500", "n = 100", "n = 200", "n = 300", "n = 400", "n = 500") ) ggplot(Testing, aes(x = "", y = Count, fill = factor(Category))) + geom_col(width = 1, position = "stack") + facet_wrap( ~ Letter, ncol=5)+ theme_void()+ theme( legend.position = "bottom", # 新增行:给分面标题底部加6pt留白 strip.text.x = element_text(margin = margin(b = 6)) )+ scale_fill_manual(labels = c("Category A", "Category B"), values = c("blue", "red"))+ labs(fill = "")+ coord_polar(theta = "y")+ geom_text(aes(label = RawN), x = -Inf, y = Inf, hjust = 0.5, vjust = 7.9)
如果有特殊需求需要将分面标题图层彻底前置,可借助gtable包操作图形对象的图层顺序,将strip层移到所有图层的最上方即可。
内容的提问来源于stack exchange,提问作者YNP97
相关产品推荐
相关产品推荐

