Подтвердить что ты не робот

Добавление таблицы в область построения графика ggplot в r

Я хотел бы добавить таблицу координат выделенного сайта в ggplot.

Используя предыдущий question в качестве примера данных:

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

Я хотел бы добавить следующую таблицу в нижний правый угол участка в области построения графика. Любые советы?

table<-cbind(sites=c("site 1","site 2","site 3","site 4"),mydata[10:13,])
table

    sites  a          b
    site 1 10 -0.3053884
    site 2 11  1.5117812
    site 3 12  0.3898432
    site 4 13 -0.6212406
4b9b3361

Ответ 1

Вы можете использовать ggplot2 annotation_custom с tableGrob из пакета 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

Ответ 2

@user3206440, @Punintended Существует простой способ удаления номеров строк: добавьте rows = NULL к вызову 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)

Изображение графика

См. gridExtra Wiki.

Ответ 3

@user3206440: Я нашел обход, который удаляет номера строк. Я отформатировал свои данные как матрицу, присвоил имена столбцов, а затем сразу получил вызов tableGrob. Всякий раз, когда tableGrob вызывал его как фрейм данных, имя строки сохранялось.

Ниже приведен пример. Я уверен, что есть более простой способ справиться с выходом 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")

И потом...

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