Agregar tabla dentro de la región de trazado de un ggplot en r

Me gustaría agregar una tabla de las coordenadas del sitio resaltado en un ggplot.

Usando una pregunta previa como datos de ejemplo:

set.seed(1) mydata <- data.frame(a=1:50, b=rnorm(50)) ggplot(mydata,aes(x=a,y=b)) + geom_point(colour="blue") + geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) 

enter image description here

Me gustaría agregar la siguiente tabla a la esquina inferior derecha de la gráfica dentro de la región de trazado. ¿Algún consejo?

 table<-cbind(sites=c("site 1","site 2","site 3","site 4"),mydata[10:13,]) table sites ab site 1 10 -0.3053884 site 2 11 1.5117812 site 3 12 0.3898432 site 4 13 -0.6212406 

Puede usar la annotation_custom tableGrob con un tableGrob gridExtra paquete gridExtra .

 library(ggplot2) library(gridExtra) set.seed(1) mydata <- data.frame(a=1:50, b=rnorm(50)) mytable <- cbind(sites=c("site 1","site 2","site 3","site 4"),mydata[10:13,]) k <- ggplot(mydata,aes(x=a,y=b)) + geom_point(colour="blue") + geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) + annotation_custom(tableGrob(mytable), xmin=35, xmax=50, ymin=-2.5, ymax=-1) 

enter image description here

@ user3206440, @Punbash Existe una manera fácil de eliminar números de rows = NULL : agregue rows = NULL a la llamada a tableGrob .

 library(ggplot2) library(gridExtra) set.seed(1) mydata <- data.frame(a=1:50, b=rnorm(50)) mytable <- cbind(sites=c("site 1","site 2","site 3","site 4"), mydata[10:13,]) k <- ggplot(mydata,aes(x=a,y=b)) + geom_point(colour="blue") + geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) + annotation_custom(tableGrob(mytable, rows=NULL), xmin=35, xmax=50, ymin=-2.5, ymax=-1) 

Trazar imagen

Por favor, mira la gridExtra Wiki .

@ user3206440: Encontré una solución alternativa que elimina los números de fila. Formateé mis datos como una matriz, asigné los nombres de las columnas, y luego hice que tableGrob llamara directamente. Cada vez que tenía tableGrob llamarlo como un dataframe, el nombre de la fila persistió.

A continuación hay un ejemplo. Estoy seguro de que hay una manera más fácil de lidiar con la salida chisq.test

 chivalues <- chisq.test(chitable) chidf <- matrix(c(unlist(c(round(as.numeric(chivalues[1]), 2), chivalues[2], round(as.numeric(chivalues[3]), 5), numcells))), nrow = 1, ncol = 4, byrow = FALSE) colnames(chidf) <- c("Chi-Squared", "DF", "P Value", "Total Cells") 

Y luego más tarde ...

 annotation_custom(tableGrob(chidf), xmin=2, xmax=6, ymin=700, ymax=800) 

Con el lanzamiento de ‘ggplot2’ 3.0.0 y ‘ggpmisc’ 0.3.0, una nueva respuesta más simple es posible:

 library(ggplot2) library(ggpmisc) set.seed(1) mydata <- data.frame(a = 1:50, b = rnorm(50)) table <- cbind(sites=c("site 1", "site 2", "site 3", "site 4"), mydata[10:13, ]) ggplot(mydata, aes(x = a, y = b)) + geom_point(colour = "blue") + geom_point(data = mydata[10:13, ], aes(x = a, y = b), colour = "red", size = 5) + annotate(geom = "table", x = 37, y = -0.8, label = list(table), vjust = 1, hjust = 0) 

'ggplot2' 3.0.0 es totalmente compatible con tibbles (ver anuncio de lanzamiento ), lo que hace posible mapear una lista de marcos de datos con la estética de la label . El nuevo geom_table() en el paquete 'ggpmisc 0.3.0' aprovecha esto, haciendo posible la adición de tablas con una syntax similar a la de geom_label() (ver documentación ). Aquí parecía más apropiado agregar la tabla como una anotación, pero por supuesto geom_table() también se puede usar directamente, como otras geometrías ggplot .

enter image description here