ggplot堆叠条形图在每列顶部添加多个标签

时间:2020-05-14 17:21:51

标签: r ggplot2 geom-bar stacked-chart geom-text

我试图创建一个堆积的条形图,并且由于我的某些值非常小,所以没有在每个条形图内放置标签。我想知道是否可以将每个值放在具有最高值的栏顶部并堆叠在其下方。然后,文本颜色将与条形颜色对应。我在y=val+1中尝试过geom_text(),但这也会增加最高的价值。这不是我想要的。

x<-c(1,2,3,4,5)
y1<-c(0.5,4,2,9,16)
y2<-c(.25,3,10,0.02,7)
y3<-c(2,2,16,0.023,4.5)
df1<-data.frame(x=x,v1=y1,stringsAsFactors=FALSE)
df2<-data.frame(x=x,v2=y2,stringsAsFactors=FALSE)
df3<-data.frame(x=x,v3=y3,stringsAsFactors=FALSE)
pClass<-left_join(df1,df2,by="x")
pClass<-left_join(pClass,df3,by="x")
pClass<-pClass%>%pivot_longer(-x,names_to="var",values_to="val")%>%mutate(val=as.numeric(val))

ggplot(pClass,aes(x=x,y=val,fill=var))+geom_bar(position="stack",stat="identity")+
  geom_text(aes(x=x,label = prettyNum(as.numeric(val),digits = 3),y=val),size = 3,fontface="bold")

t

我大概想要这样的东西:每个小节我都会在小节的顶部有3个值。 enter image description here

1 个答案:

答案 0 :(得分:0)

很难在小类别中显示一些标签,但这应该可以做到:

ggplot(pClass,aes(x=x,y=val,fill=var, label=prettyNum(as.numeric(val),digits = 3)))+
  geom_bar(stat="identity")+
  geom_text(position="stack")

或者给定较小的数据间隔,请不要堆叠条形图:

ggplot(Data, aes(x = Year, y = Frequency, fill = Category)) +
  geom_bar(stat="identity", position=position_dodge())+
  geom_text(aes(label=Frequency), position=position_dodge(0.9), vjust=0)