如何在R ggplot2的facet_wrap分面图中为每个分面显示X轴刻度标签
解决ggplot2 facet_wrap分面图每个分面独立显示X轴刻度标签的问题
要让facet_wrap生成的每个分面都独立显示X轴刻度标签,只需对原代码做两处关键修改:添加scales = "free_x"参数并调整主题设置,具体如下:
示例数据
| tenant | name | value |
|---|---|---|
| bnl | N > 82 | 0.0551241 |
| bnl | N > 84 | 0.240242 |
| bnl | N > 88 | 0.610067 |
| bnl | N > 92 | 2.40777 |
| bnl | N > 96 | 0.183061 |
| bnl | N < 76 | 0.540545 |
| bnl | N < 82 | 0.748700 |
| bnl | N = 96 | 95.7550 |
| gnl | N > 82 | 0.0209527 |
| gnl | N > 84 | 0.112621 |
| gnl | N > 88 | 0.216729 |
| gnl | N > 92 | 1.38681 |
| gnl | N > 96 | 0.217384 |
| gnl | N < 76 | 0.157800 |
| gnl | N < 82 | 0.202979 |
| gnl | N = 96 | 97.8425 |
| knl | N > 82 | 0.0506792 |
| knl | N > 84 | 0.175074 |
| knl | N > 88 | 0.458416 |
| knl | N > 92 | 2.13620 |
| knl | N > 96 | 2.51016 |
| knl | N < 76 | 1.13414 |
| knl | N < 82 | 1.21016 |
| knl | N = 96 | 93.4593 |
| mnl | N > 82 | 0.126081 |
| mnl | N > 84 | 0.460583 |
| mnl | N > 88 | 0.680839 |
| mnl | N > 92 | 3.72686 |
| mnl | N > 96 | 0.0648418 |
| mnl | N < 76 | 0.651506 |
| mnl | N < 82 | 0.997329 |
| mnl | N = 96 | 93.9435 |
| mpnl | N > 82 | 0.117108 |
| mpnl | N > 84 | 0.303749 |
| mpnl | N > 88 | 0.639825 |
当前绘制的图表

修改后的代码
data %>% filter(name != "N < 82" & name != "N < 84" & name != "N > 84") %>% ggplot(aes(x = name, y = value, fill = tenant)) + geom_bar(stat = "identity") + scale_y_continuous(name = "Percentage of cells", labels = function(x) paste0(x, '%')) + facet_wrap(~tenant, scales = "free_x") + # 允许各分面使用独立X轴 theme( text = element_text(size = 12), legend.position = "none", legend.title = element_blank(), axis.title.x = element_blank(), strip.placement = "outside", # 分面标题移至X轴标签上方 axis.text.x = element_text(angle = 45, hjust = 1), # 旋转标签避免重叠 panel.spacing = unit(1.5, "lines") # 增加分面间距提升可读性 )
修改说明
scales = "free_x":让每个分面根据自身数据显示对应的X轴类别,同时强制每个分面都渲染X轴刻度标签strip.placement = "outside":避免分面标题与X轴标签重叠,保证布局整洁axis.text.x参数:旋转X轴标签并调整对齐方式,解决标签过长导致的重叠问题panel.spacing:增大分面之间的间距,让每个分面的X轴标签更清晰易读
内容的提问来源于stack exchange,提问作者leoin86
相关产品推荐
相关产品推荐

