geom_text on only top part of stacked bar plot

被刻印的时光 ゝ 提交于 2019-12-04 11:50:04

Another solution (I also changed the angle of the x-axis text):

# creating percentage variables
df.build$occ.perc <- round(df.build$occupiable / (df.build$occupiable + df.build$nonoccupiable) * 100)
df.build$nonocc.perc <- round(df.build$nonoccupiable / (df.build$occupiable + df.build$nonoccupiable) * 100)

# melt data frame for stack bar plot![enter image description here][1]
df.build2 <- cbind(
  melt(df.build, id = c("building"), measure = c(2:3)),
  melt(df.build, id = c("building"), measure = c(4:5), value.name = "perc")
)
df.build2 <- df.build2[,-c(4,5)]
df.build2$perc <- ifelse(df.build2$variable=="occupiable", df.build2$perc==NA, df.build2$perc)

# creating the plot
ggplot(df.build2, aes(x=reorder(building, -value), y=value, fill=variable)) +
  geom_bar(stat="identity") +
  xlab("") +
  ylab("") +
  geom_text(aes(label = perc), size = 3, hjust = 0.5, vjust = 2, position = "stack") +
  theme(legend.position="top", axis.text.x = element_text(angle = 45, vjust=0.5)) +
  ggtitle("Porównanie wartości prawdziwych i odczuwalnych")

the result:

There are 2 problems, you are missing a comma betweeen the first two elements of your label vector; and, your label vector is too short. Even though you have what looks like 10 bars, you infact have 20 (since they are stacked). To get around this precede your labels by 10 blank character strings:

geom_text(
 aes(label = c(rep("",10),
 "29%", "30%", "36%", "39%", "32%", "31%", "31%", "29%", "29%", "28%")),
size = 3, hjust = 0.5, vjust = 3, position = "stack")

Which gives:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!