2017-06-04 92 views
2

我问这个没有找到可以尝试的东西,因为我没有找到相同的东西。我为此道歉。在条形图下显示数值表

this条形图:

df <- structure(list(year = 2002:2005, work = c(1L, 2L, 3L, 2L), confid = c(8L, 
5L, 0L, 6L), jrs = c(0L, 3L, 4L, 5L)), .Names = c("year", "work", 
"confid", "jrs"), class = "data.frame", row.names = c(NA, -4L 
)) 

library(ggplot2) 
library(reshape) 
md <- melt(df, id=(c("year"))) 
temp.plot <- ggplot(data=md, aes(x=year, y=value, fill=variable)) + 
    geom_bar(stat="identity")+ 
    theme(axis.text.x=element_text(angle=90))+ 
    ggtitle("Score Distribtion") 

temp.plot 

我想问一下,如果是有使用GGPLOT2有每年下的值,因为它是在barplot为每个变量什么简单的办法。 这里是一个虚拟示例输出: enter image description here

回答

8

在每个小节内绘制计数可能会更好。例如:

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

enter image description here

如果你仍然想的情节下方的表格,我不知道一个简单的方法,但你可以创建表格单独tableGrob,提取图例一个单独的grob(图形对象),然后分别布置每个部分。布置各个部分需要手动调整,尽管比我更了解栅格图形的人可能会自动化。这里有一个例子:

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

enter image description here