在水平条形图上对齐文本

时间:2020-10-02 00:17:53

标签: r ggplot2 text data-visualization

我遇到了几个指出如何注释条形图的线程,但是我尝试了这段代码的多次迭代,并且似乎无法使文本左对齐,从0%开始xstrong。我尝试将hjust更改为“ left”(0.95),并逐渐增大数字-它们都没有将文本绑定到x原点。

enter image description here

dummy_data <- tibble(Proportion = c(0.87, 1),
       `Person of Interest` = c("Person B", "Person A"))

dummy_data %>%
  ggplot(aes(x = Proportion, y = `Person of Interest`, 
             fill = `Person of Interest`,
             label = paste0(`Person of Interest`, "~", scales::percent(Proportion))))+
  geom_col(width = 0.5) + 
  geom_text(position = position_dodge(width = .9),    # move to center of bars
            vjust = 0,    # nudge above top of bar
            hjust = "top",
            size = 4.5,
            colour = "white",
            fontface = "bold") +
  scale_x_continuous(labels = scales::percent, 
                     limits = c(0, 1.01), 
                     expand = c(0, 0)) +
  ggthemes::theme_economist(horizontal = F) + 
  scale_fill_manual(values = alpha(c("black", "#002D62"), .5)) +
  ggtitle("Lack of Skill") + 
  theme(title = element_text("Lack of Skill"),
        plot.title = element_text(hjust = 0.5, face = "italic"),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_text(hjust = 0.25),
        legend.position="none",
        aspect.ratio = 1/3)

我经常发现ggplot令人发疯的文本数据-非常感谢愿意看一看的人。

1 个答案:

答案 0 :(得分:1)

尝试这种接近您想要的方法。您的主题可能会因放置标签而产生问题:

#Code
dummy_data %>%
  ggplot(aes(x=`Person of Interest`,
             y=Proportion,
             fill=`Person of Interest`,
             label = paste0(`Person of Interest`, "~", scales::percent(Proportion))))+
  geom_bar(stat = 'identity')+
  geom_text(aes(y=0.13),
            size = 4.5,
            colour = "white",
            fontface = "bold")+coord_flip()+
  scale_y_continuous(labels = scales::percent, 
                     limits = c(0, 1.01), 
                     expand = c(0, 0)) +
  ggthemes::theme_economist(horizontal = F) + 
  scale_fill_manual(values = alpha(c("black", "#002D62"), .5)) +
  ggtitle("Lack of Skill") + 
  theme(title = element_text("Lack of Skill"),
        plot.title = element_text(hjust = 0.5, face = "italic"),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.x = element_blank(),
        axis.text.x = element_text(hjust = 0.25),
        legend.position="none",
        aspect.ratio = 1/3)

输出:

enter image description here