首页 > 解决方案 > R ggplot2中条形图上标签位置的问题

问题描述

我想让所有标签的值都在条形旁边。其中一根柱线具有负值,它会与 position_dodge 产生问题。我无法按照我喜欢的方式使用 hjust 设置它,因为带有负值的栏上的标签放置在完全不同的位置。我应该如何解决这个问题?

数据集:https ://imgur.com/a/Dg70uO5 (我没有足够的声誉将其附加到帖子中)

ggplot(USA, aes(x = Values, 
                y = fct_reorder(factor(Categories), Values),
                fill = Categories)) + 
  scale_fill_manual(values = colors) + 
  geom_col(width = 0.65) +
  geom_text(aes(label = format(x= paste0(round(Values/1000000, 2), " mil t"))), 
            size = 3.3, position = position_dodge2(width = 0.9), hjust = -0.1) +
  labs(title = "Greenhouse gas emissions by sector, United States 2016") +
  scale_y_discrete(expand = expansion(mult = c(0.05, 0.05))) +
  scale_x_continuous(breaks = c(0, 100000000, 300000000, 
                                500000000, 1000000000, 
                                1500000000, 2000000000),
                     labels = c("0", "100 mil", "300 mil", 
                                "500 mil", "1 bilion", 
                                "1.5 bilion", "2 bilion"), 
                     expand = expansion(mult = c(0.15, 0.15))) +
  theme(legend.position = "none",
        axis.title = element_blank(),
        panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_text(family = "sans", size = 9),
        title = element_text(size = 11, family = "sans", face = "bold"))

条形图的照片(我没有足够的声誉将其附加到帖子中):https ://imgur.com/a/mVlXuc7

还尝试使用ggfittext“geom_bar_text”,但使用此解决方案时,我遇到了标签大小的问题,而且我不知道如何更改它。此外,有些值不适合条形图。下面的代码:

ggplot(USA, aes(x = Values, 
                y = fct_reorder(factor(Categories), Values),
                fill = Categories,
                label = format(x= paste0(round(Values/1000000, 2), " mil t")))) + 
  scale_fill_manual(values = colors) + 
  geom_col(width = 0.65) +
  labs(title = "Greenhouse gas emissions by sector, United States 2016") +
  scale_y_discrete(expand = expansion(mult = c(0.05, 0.05))) +
  scale_x_continuous(breaks = c(0, 100000000, 300000000, 
                                500000000, 1000000000, 
                                1500000000, 2000000000),
                     labels = c("0", "100 mil", "300 mil", 
                                "500 mil", "1 bilion", 
                                "1.5 bilion", "2 bilion"), 
                     expand = expansion(mult = c(0.15, 0.15))) +
  geom_bar_text(position = "dodge") + 
  theme(legend.position = "none",
        axis.title = element_blank(),
        panel.grid = element_blank(),
        panel.background = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.y = element_text(family = "sans", size = 9),
        title = element_text(size = 11, family = "sans", face = "bold"))

条形图照片(带geom_bar_text): https ://imgur.com/a/P6eSnhe

标签: rggplot2plot

解决方案


推荐阅读