You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:33:22