【问题标题】:ggplot stacked bar plots adding multiple labels on top of each columnggplot堆积条形图在每列顶部添加多个标签
【发布时间】:2020-05-14 17:21:51
【问题描述】:

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

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")

大致上我想要这样的东西:每个条我将在条的顶部有 3 个值。

【问题讨论】:

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


    【解决方案1】:

    在小类别中显示一些标签会很困难,但应该这样做:

    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)
    

    【讨论】:

    • 这会将所有数字放在每个条的顶端,但我在同一时间步长(“x”)上有多个非常小的值。然后这些值将堆叠在一起。有没有办法可以将所有三个值都放在条形顶部?
    • 我明白你的意思。那你为什么要堆叠酒吧?这会将您的数据压缩到更小的间隔中,并且很难将小类可视化(除了标签)。我在上面添加了一个替代方法来显示闪避的条形。
    • 我想给出一个可视化的表示,作为每个变量在总数中的比例,并带有堆叠的条形。如果我使用闪避的条形,那么显示总数会变得更加困难,除非我添加第四个变量来表示每个时间步的总数
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多