r ggplot2 如何在 geom_text 中制作 vjust 将标签放在栏的底部

Jer*_*ryN 5 r ggplot2

我试图解决两个问题:

  1. 第一种是让条形图中的某些条形超出图形的顶部。
  2. 第二种是在图表底部插入条形的值,这样查看图表的人就可以知道条形在图表上方多远。

下面的代码是我试图解决这两个问题的尝试。它解决了第一个问题coord_cartesian,因为条形图超出了图形的顶部。但这并不能解决第二个问题。条形的值位于条形的顶部而不是底部。我认为 vjust = "bottom" 或 0 可以解决问题,但我已经在很多地方尝试过,但都没有成功。

library(ggplot2)
library(data.table)

dt <- data.table(
  scenario = c("2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC", "2010", "SSP2-NoCC", "SSP2-HGEM", "SSP1-NoCC", "SSP3-NoCC"),
  value = c(45.75, 15.74, 17.16, 10.73, 24.03, 15.37, 6.87, 7.61, 5.63, 8.87, 9, 3.43, 3.76, 2.93, 4.01, 2.53, 1.79, 1.95, 1.77, 1.79),
  region_name = c("Low", "Low", "Low", "Low", "Low", "Lower middle", "Lower middle", "Lower middle", "Lower middle", "Lower middle", "Upper middle", "Upper middle", "Upper middle", "Upper middle", "Upper middle", "High", "High", "High", "High", "High")
)

yLab <- "(percent)"
yRange <- c(0, 40)
plotTitle <-"Food Budget Share Of Per Capita Income"
colorList <- c("#000000", "#FEF0D9", "#2CA25F", "#FC8D59", "#D7301F")


ggplot(data = dt, aes(x = factor(region_name), y = value, group = scenario)) +
  geom_col(aes(fill = scenario), position = "dodge", color = "black") +
  coord_cartesian(ylim = yRange) +
  theme(legend.position = "none") +
  labs(x = NULL, y = yLab) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, family = "Times", face = "plain")) +
  theme(axis.title.y = element_text(family = "Times", face = "plain")) +
  geom_text(aes(label = value, vjust = "bottom"), position = position_dodge(0.9), size = 3, angle = 90,  color = "white") +
  scale_fill_manual(values = colorList) +
  theme(plot.title = element_text(hjust = 0.5, size = 11, family = "Times", face = "plain")) +
  ggtitle(plotTitle)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

hpe*_*626 5

第二个问题的技巧是将y美学映射到固定值。我用过,y = 1.25但你可以随意调整。我也用过,size = 2.25因为它看起来更好,在我看来。而不是vjust = 'bottom', 使用,hjust = 'left'因为您正在以 90 度旋转应用这些设置。所以这geom_text部分应该是

geom_text(data = dt, aes(x = factor(region_name),  y=0.5, label = round(value, 1)), position = position_dodge(0.9), size = 2.25, angle = 90,  color = "white", hjust = 'left')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明