Show the table of values under the bar plot

前端 未结 1 597
隐瞒了意图╮
隐瞒了意图╮ 2020-12-30 19:03

I ask this without find something to try, because I didn\'t find something same. I apologize for this.

From this bar plot:

df <- structure(list(ye         


        
相关标签:
1条回答
  • 2020-12-30 19:18

    It might be better to plot the counts within each bar. For example:

    library(ggplot2)
    theme_set(theme_classic())
    
    ggplot(data=md, aes(x=year, y=value, fill=variable)) + 
      geom_bar(stat="identity") + 
      ggtitle("Score Distribution") +
      geom_text(aes(label=value), position=position_stack(vjust=0.5), colour="white") +
      labs(fill="")
    

    If you still want a table beneath the plot, I don't know of a simple way, but you can create a separate tableGrob for the table, extract the legend as a separate grob (graphical object), then lay out each part separately. Laying out the various parts requires some tweaking by hand, although someone who understands grid graphics better than I do might be able to automate that. Here's an example:

    library(grid)
    library(gridExtra)
    
    # Function to extract legend
    # https://stackoverflow.com/a/13650878/496488
    g_legend <- function(a.gplot){
      tmp <- ggplot_gtable(ggplot_build(a.gplot))
      leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
      legend <- tmp$grobs[[leg]]
      return(legend)}
    
    p = ggplot(data=md, aes(x=year, y=value, fill=variable) ) + 
      geom_bar(stat="identity")+ 
      #theme(axis.text.x=element_text(angle=90, vjust=0.5, hjust=0.5))+ 
      ggtitle("Score Distribution") +
      labs(fill="")
    
    # Extract the legend as a separate grob
    leg = g_legend(p)
    
    # Create a table grob
    tab = t(df)
    tab = tableGrob(tab, rows=NULL)
    tab$widths <- unit(rep(1/ncol(tab), ncol(tab)), "npc")
    
    # Lay out plot, legend, and table grob
    grid.arrange(arrangeGrob(nullGrob(), 
                             p + guides(fill=FALSE) + 
                               theme(axis.text.x=element_blank(),
                                     axis.title.x=element_blank(),
                                     axis.ticks.x=element_blank()),
                             widths=c(1,8)), 
                 arrangeGrob(arrangeGrob(nullGrob(),leg,heights=c(1,10)),
                             tab, nullGrob(), widths=c(6,20,1)),
                 heights=c(4,1))
    

    0 讨论(0)
提交回复
热议问题