我正在尝试在包含两组的条形图的条形顶部添加值。对于大于零的值它工作得很好。 但我也有没有计数的级别,因此条形的高度为 0。然后条形顶部带有计数的文本位于中间,而不是条形的正上方。而计数为0的地方没有任何指示。
这是一个数据集:
vec.feed1.sorted <- c(rep(2,1), rep(3,2), rep(4,7), rep(5,15), rep(6,30), rep(7,40))
vec.feed1 <- sample(vec.feed1.sorted)
set.seed(001)
vec.feed1
df.feedback <- data.frame(
study = factor(c(rep(1,62),rep(2,33)), levels=c("1","2")),
feed1 = factor(vec.feed1, levels=as.character(c(1:7)))
)
df.feedback
这就是我到目前为止所做的:
ggplot(data = df.feedback,
aes(x = factor(feed1, levels = 1:7, labels = labels.feed1),
fill = factor(study))) +
geom_bar(aes(y = after_stat(count / ave(count, fill, FUN = sum))),
position = position_dodge(preserve="single")) +
scale_fill_manual(
values = c("grey40", "grey60"),
name = "event location",
labels = c("university", "cinema")) +
geom_text(aes(y = after_stat(count / ave(count, fill, FUN = sum)),
label = after_stat(scales::percent(count / ave(count, fill, FUN = sum), accuracy = 1))),
stat = "count", position = position_dodge(width=0.9), vjust = -0.5) +
ylab("percent of audience relative to location") +
xlab("How did you like this event?") +
theme(axis.text.x = element_text(angle = 45, hjust = .9)) +
#theme(axis.ticks.x = element_blank()) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.51)) +
scale_x_discrete(drop = FALSE) +
theme(
panel.border = element_rect(linetype = "solid", colour = "black", linewidth = .5, fill = NA),
panel.grid.minor = element_line(colour = "grey93", linewidth = .3),
panel.grid.major.y = element_line(colour = "grey93", linewidth = .3),
panel.background = element_rect(fill = "grey97")
) +
theme(axis.title.x.bottom = element_text(margin = margin(t = .15, unit = "in")))
这是我得到的情节:
我希望“2%”和“3%”位于栏上方的中间。
如果您能帮助我,我会很高兴。 最好的,H.
您可以使用
annotate
在您想要的位置手动添加标签。
library(tidyverse)
set.seed(001)
vec.feed1.sorted <- c(rep(2,1), rep(3,2), rep(4,7), rep(5,15), rep(6,30), rep(7,40))
vec.feed1 <- sample(vec.feed1.sorted)
df.feedback <- data.frame(
study = factor(c(rep(1,62),rep(2,33)), levels=c("1","2")),
feed1 = factor(vec.feed1, levels=as.character(c(1:7)))
)
ggplot(data = df.feedback,
aes(x = factor(feed1, levels = 1:7),
fill = factor(study))) +
geom_bar(aes(y = after_stat(count / ave(count, fill, FUN = sum))),
position = position_dodge(preserve="single")) +
scale_fill_manual(
values = c("grey40", "grey60"),
name = "event location",
labels = c("university", "cinema")) +
annotate('text',
x = c(1.8,2.8,3.8,4.2,4.8,5.2,5.8,6.2,6.8,7.2),
y = c(0.05,0.05,0.09,0.11,0.18,0.17,0.28,0.44,0.50,0.32),
label = c('3%','3%','6%','9%','16%','15%','26%','42%','48%','30%')) + # make adjustments to position and labels here
ylab("percent of audience relative to location") +
xlab("How did you like this event?") +
theme(axis.text.x = element_text(angle = 45, hjust = .9)) +
scale_y_continuous(labels = scales::percent, limits = c(0, 0.51)) +
scale_x_discrete(drop = FALSE) +
theme(
panel.border = element_rect(linetype = "solid", colour = "black", linewidth = .5, fill = NA),
panel.grid.minor = element_line(colour = "grey93", linewidth = .3),
panel.grid.major.y = element_line(colour = "grey93", linewidth = .3),
panel.background = element_rect(fill = "grey97")
) +
theme(axis.title.x.bottom = element_text(margin = margin(t = .15, unit = "in")))
创建于 2024-07-01,使用 reprex v2.1.0