【问题标题】:Center alignment of text over each bar on faceted, dodged bar plot using ggplot2 in R使用 R 中的 ggplot2 在多面、闪避的条形图上的每个条形上的文本居中对齐
【发布时间】:2018-11-23 15:16:08
【问题描述】:

我希望我的文本在多面闪避条形图中的每个条形上方居中对齐。

# setup
library(ggplot2); library(tidyverse)
data("iris")

# graph
iris %>% group_by(Species) %>% 
mutate(Petal_Group = ifelse(Petal.Width < median(Petal.Width), "Short", "Long")) %>% 
mutate(Sepal_Group = ifelse(Sepal.Width < median(Sepal.Width), "Short", "Long")) %>% 
group_by(Petal_Group, Sepal_Group, Species) %>% 
summarise(mean.Sepal.Length = mean(Sepal.Length)) %>% 
mutate(asterisks = "***") %>% 
ggplot(aes(x = Petal_Group, y = mean.Sepal.Length)) + 
    geom_col(aes(fill = Species), position = "dodge") + 
    geom_text(aes(label=asterisks, group = Species), position = position_dodge(width = 1)) + 
    facet_grid(~Sepal_Group, labeller = label_parsed) + 
    theme(legend.position = "bottom", panel.background = element_blank(), panel.border = element_rect(colour = "black", fill = NA, size = 0.2), strip.background = element_blank())

在示例中(对不起,如果它过于复杂,但我正在使用类似的东西),三个星号(“***”)不在每个条的中心。即,红条上的星号出现在左侧,蓝条上的星号出现在右侧。

我尝试调整 geom_text 中的 hjust,但我无法正确设置。 (难道没有更通用的居中对齐方式,比如position = "center"?)

【问题讨论】:

    标签: r ggplot2 centering text-alignment geom-text


    【解决方案1】:

    geom_bargeom_col 的默认闪避宽度我认为是 0.9,而不是 1,因此您的文本与条形的闪避量不同。如果您创建一个可以应用于列和文本的闪避对象,它们将很好地对齐:

    # graph
    dodger = position_dodge(width = 0.9)
    iris %>% group_by(Species) %>% 
        mutate(Petal_Group = ifelse(Petal.Width < median(Petal.Width), "Short", "Long")) %>% 
        mutate(Sepal_Group = ifelse(Sepal.Width < median(Sepal.Width), "Short", "Long")) %>% 
        group_by(Petal_Group, Sepal_Group, Species) %>% 
        summarise(mean.Sepal.Length = mean(Sepal.Length)) %>% 
        mutate(asterisks = "***") %>% 
        ggplot(aes(x = Petal_Group, y = mean.Sepal.Length)) + 
        geom_col(aes(fill = Species), position = dodger) + 
        geom_text(aes(label=asterisks, group = Species), position = dodger) + 
        facet_grid(~Sepal_Group, labeller = label_parsed) + 
        theme(legend.position = "bottom", panel.background = element_blank(), 
              panel.border = element_rect(colour = "black", fill = NA, 
              size = 0.2), strip.background = element_blank())
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      相关资源
      最近更新 更多