如何在 ggplot2 中的 position_dodge 中将单个条形位置与多个条形居中

Posted

技术标签:

【中文标题】如何在 ggplot2 中的 position_dodge 中将单个条形位置与多个条形居中【英文标题】:How to centre single bar position with multiple bars in position_dodge in ggplot2 【发布时间】:2022-01-01 12:55:36 【问题描述】:

我有以下 geom_bar 闪避图,并认为 8、17、26 和 27 岁的单条看起来集中而不是偏左更好。我不确定要在脚本中添加什么来实现这一点。任何帮助将不胜感激。

这是脚本:


ggplot(data = combo1, aes(x = Age_Year, fill = Tactic)) + 
    geom_bar(position = position_dodge(preserve = 'single')) + 
    theme_classic() + 
    labs(x = "Age (years)", y = "Counts of Fish", show.legend = FALSE)+
    theme(legend.position = "none")+
    scale_fill_manual("legend",  values = c("Migr" = "skyblue", "OcRes" = "pale green", "EstRes" = "pink"))
    

【问题讨论】:

请使问题可重现;将dput(combo1) 的输出添加到问题中;见minimal reproducible example。 【参考方案1】:

OP,使用position_dodge2(preserve="single") 代替position_dodge(preserve="single")。出于某种原因,居中的条形/列在position_dodge() 上不能完全正常工作,但在position_dodge2() 上却可以。请注意切换位置功能时的间距略有不同,但总体上应该可以解决您的问题。

OP 问题的可重现示例

library(ggplot2)
set.seed(8675309)
df <- data.frame(
  x=c("A", "A", "A", "B", "C", "C"),
  grouping_var = c("Left", "Middle", "Right", "Middle", "Left", "Right"),
  values = sample(1:100, 6))

position_dodge() 的基本情节:

ggplot(df, aes(x=x, y=values, fill=grouping_var)) +
  geom_col(position=position_dodge(preserve = "single")) +
  theme_classic()

当你使用position_dodge2():

ggplot(df, aes(x=x, y=values, fill=grouping_var)) +
    geom_col(position=position_dodge2(preserve = "single")) +
    theme_classic()

【讨论】:

以上是关于如何在 ggplot2 中的 position_dodge 中将单个条形位置与多个条形居中的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 ggplot2 中的某些条件删除标签?

如何在R中的ggplot2中绘制组均值的平均值?

如何将图例添加到 ggplot2 中的多行?

如何使 ggplot2 中的图例与我的情节高度相同?

如何快速(优雅地)在 R 中的时间序列对象 `ts` 和日期框架之间进行迭代以进行 ggplot2 绘图?

如何在 ggplot2 中的 position_dodge 中将单个条形位置与多个条形居中