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

如何在ggplot中重新排列柱状图:按DAS分组并列展示CT与HS柱

解决方案

要实现按DAS分组、每个DAS下CT与HS柱状图并列的效果,你需要调整ggplot的分组逻辑,强制优先按DAS分组,再在每个DAS组内展示不同Treatment的柱。具体修改如下:

修改后的代码

# 先确保DAS是有序因子(按你的实际DAS顺序调整levels)
data$DAS <- factor(data$DAS, levels = c("1DAS", "15DAS", "30DAS")) # 替换为你的实际DAS值

ggplot(data, aes(x = Genotype, y = Pn, fill = DAS, group = interaction(DAS, Treatment))) +
  geom_col_pattern(aes(pattern = Treatment), pattern_color = '#00000050',
                   position = position_dodge(width = 0.7), width = 0.5, 
                   color = 'gray50',
                   pattern_angle = 45, pattern_spacing = 0.02) +
  scale_pattern_manual(values = c('none', 'stripe'),
                       guide = guide_legend(override.aes = list(fill = 'white'))
  ) +
  scale_fill_brewer('Species', palette = 'Pastel2', 
                    guide = guide_legend(override.aes = list(pattern = 'none'))
  ) + 
  theme_minimal(base_size = 16) +
  theme(axis.text.x.bottom = element_text(face = "bold"),
        panel.spacing.x = unit(0, 'mm'),
        panel.grid.major.x = element_blank(),
        axis.text.x = element_text(angle=90))

关键修改说明

  • 设置有序DAS因子:将DAS转换为指定顺序的因子,避免ggplot按字母顺序排列(比如"15DAS"排在"1DAS"前面),保证分组顺序符合需求。
  • 指定分组逻辑:通过group = interaction(DAS, Treatment)强制ggplot先按DAS分组,再在每个DAS组内按Treatment拆分,这样每个Genotype下会先展示1DAS的CT和HS柱,接着是15DAS的CT和HS柱,以此类推。
  • 保持position_dodge参数:position_dodge(width = 0.7)确保同一DAS组内的CT和HS柱紧密并列,不同DAS组之间有清晰间隔。

如果你的DAS是数字类型(比如1、15、30),可以用factor(data$DAS, levels = sort(unique(data$DAS)))自动生成有序因子。

内容的提问来源于stack exchange,提问作者Ikram Bashir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:33:26