2017-06-04 1 views
2

Ich frage dies ohne etwas zu versuchen, weil ich nicht das Gleiche gefunden habe. Ich entschuldige mich für diese.Zeigen Sie die Tabelle der Werte unter dem Strich Plot

Von this bar Grundstück:

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 

Ich mag würde, wenn fragen, ist es eine einfache Möglichkeit, ggplot2 den Wert unter jedem Jahr hat mit, wie es in BarPlot für jede Variable ist. hier ein Dummy-Ausgabe: enter image description here

Antwort

8

Es wäre besser, in jeder Bar, die zählt plotten. Zum Beispiel:

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

Wenn Sie noch einen Tisch unter dem Grundstück wollen, weiß ich nicht eine einfache Art und Weise, aber Sie können einen separaten tableGrob für die Tabelle erstellen, extrahieren Sie die Legende als ein separates Grob (grafisches Objekt), dann legen Sie jedes Teil separat aus. Das Verlegen der verschiedenen Teile erfordert ein paar Feinabstimmungen per Hand, obwohl jemand, der Grid-Grafiken besser versteht als ich, das vielleicht automatisieren kann. Hier ein Beispiel:

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

Verwandte Themen