我有一个堆积的条形图,高度高度不相等。我想在每个栏的顶部显示百分比。
我到目前为止所做的是以下
df = structure(list(Type = c("Bronchoscopy", "Bronchoscopy", "Endoscopy",
"Endoscopy"), Bacteremia = structure(c(1L, 2L, 1L, 2L), .Label = c("False",
"True"), class = "factor"), count = c(2710L, 64L, 13065L, 103L
), perc = c(97.6928622927181, 2.3071377072819, 99.2178007290401,
0.782199270959903)), class = c("grouped_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -4L), groups = structure(list(
Type = c("Bronchoscopy", "Endoscopy"), .rows = list(1:2,
3:4)), row.names = c(NA, -2L), class = c("tbl_df", "tbl",
"data.frame"), .drop = TRUE))
ggplot(df, aes(x = Type, y = perc, fill = Bacteremia)) +
geom_bar(stat = "identity") +
ylab("percent") +
geom_text(aes(label = paste0(round(perc, 2), "%")), position =
position_stack(vjust = -0.1), color = "black", fontface = "bold")
我似乎无法正确使用vjust
。底部栏和顶部栏的行为似乎不同。
我想要实现的是将百分比设置为略高于每个条的顶部边缘。
有什么想法吗?
答案 0 :(得分:1)
这是一种可能的方法:
ggplot(df, aes(x = Type, y = perc, fill = Bacteremia)) +
geom_bar(stat = "identity") +
ylab("percent") +
geom_text(aes(label = paste0("", round(perc, 2), "%\n"), y = perc),
color = "black", fontface = "bold", nudge_y = 2)
我应该详细说明ggplot2
将尝试相对于数据放置geom_text()
。如果您试图水平对齐文本标签,则需要使用annotate()
或提供带有type
,percent
和Bacteremia
的标签数据集,然后在{ {1}},如下所示。
geom_text()
答案 1 :(得分:1)
这里是一种方法:
df <-
tibble(
Type = c("Bronchoscopy", "Bronchoscopy", "Endoscopy", "Endoscopy"),
Bacteremia = c("False", "True", "False", "True"),
count = c(2710L, 64L, 13065L, 103L)
) %>%
group_by(Type) %>%
mutate(Percent = round((count / sum(count) * 100), 1))
df %>%
ggplot(aes(x = Type, y = Percent, fill = Bacteremia)) +
geom_col() +
geom_label(
data = . %>% filter(Bacteremia == "True"),
aes(y = Percent + 5, label = str_c(Percent, "%")),
show.legend = FALSE
) +
geom_label(
data = . %>% filter(Bacteremia == "False"),
aes(y = 105, label = str_c(Percent, "%")),
show.legend = FALSE
)
在我的计算机上可以选择5和105,但是可能需要根据您的特定设置和纵横比进行一些调整。第一个geom_label
调用基于精确的百分比设置y轴,而第二个调用将其设置在柱上方的恒定水平。
您可能还想使用geom_text
与geom_label
来尝试不同的颜色和标签设置。 geom_label
的好处是,它可以很清楚地标记出哪个组。