如何调整ggplot棒棒糖图行高?解决行间距过大问题
解决棒棒糖图行间距过大、线条贴边缘的问题
问题根源
当前代码使用全局row_number()生成order列,导致每个分面的y轴(翻转后为x轴)范围被拉至全局1-16的区间,因此每个分面内的条目之间出现大量空白,同时顶部/底部线条紧贴绘图边缘。
修改方案及代码
核心调整点
- 按
Type分组后生成组内专属排序值,让每个分面的轴范围仅对应本组条目数量,消除跨组空白 - 给轴添加内边距,避免线条紧贴边缘
- 可选:优化分面间距,让布局更紧凑
修改后的完整代码
library(tidyverse) # 用户提供的原始数据 data <- structure(list(Type = c("Programming", "Programming", "Analytics", "Professional", "Applied Science", "Applied Science", "Programming", "Analytics", "Professional", "Programming", "Analytics", "Professional", "Applied Science", "Analytics", "Professional", "Applied Science" ), Skill = c("Python", "Other", "Databases", "Project Management", "NGS", "Environmental Engineering", "Perl", "Bioinformatics", "Teaching", "R", "Statistics", "Supervision", "Microbiome", "Visualization", "Science Communication", "Applied Microbiology"), Of.5 = c(4, 4, 4.5, 4.5, 4, 4, 4.5, 4.5, 4.5, 4.7, 4.5, 4.5, 4.5, 4.7, 4.5, 4.7), Of.10 = c(7.5, 8, 8, 8, 8, 8, 8.5, 8.5, 8.5, 9, 9, 9, 9, 9.5, 9.5, 9.5)), class = "data.frame", row.names = c(NA, -16L)) skills_lolli_plot_corrOrder <- function(data){ # 关键修改:按Type分组生成组内排序 dat2 <- data %>% group_by(Type) %>% arrange(Of.10, .by_group = TRUE) %>% mutate(order = row_number()) %>% ungroup() ggplot(dat2, aes(order, Of.10)) + geom_segment(aes(xend = order, yend = 0), colour = "grey", lwd=1.5) + geom_point(size = 8, col = "#f39c12") + geom_text(aes(label = Of.10), size = 4, color="white")+ ylim(c(0,10))+ scale_x_continuous( breaks = dat2$order, labels = dat2$Skill, # 添加内边距,避免线条贴边缘 expand = expansion(add = 0.5) ) + coord_flip()+ facet_wrap(~Type, scales='free_y')+ labs( x = "", y = "" ) + theme_bw() + theme( axis.text.x = element_blank(), axis.ticks = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.major.y = element_line(colour = "grey60", linetype = "dashed"), axis.text.y = element_text(size=14), strip.text = element_text(size=14), # 可选:调整分面之间的间距 panel.spacing = unit(1, "lines") ) } # 调用绘图函数生成调整后的图 skills_lolli_plot_corrOrder(data)
效果说明
- 组内排序彻底消除了分面内的多余空白,条目间距恢复正常
- 轴内边距让顶部、底部的棒棒糖线条不再紧贴绘图边缘
- 分面间距调整可根据需求自行修改数值,让整体布局更协调
内容的提问来源于stack exchange,提问作者user2814482
相关产品推荐
相关产品推荐

