Dodawanie tabeli w obszarze wykresu ggplot w r

Chciałbym dodać tabelę współrzędnych zaznaczonej strony w ggplot.

Użycie poprzedniego pytania jako przykładowe dane:

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)

Tutaj wpisz opis obrazka

Chciałbym dodać poniższą tabelę w prawym dolnym rogu wykresu w obszarze wykresu. Jakieś rady?

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
Author: Community, 2012-09-07

4 answers

Możesz użyć ggplot2's annotation_custom z tableGrob z pakietu 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)

Tutaj wpisz opis obrazka

 56
Author: Matthew Plourde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 12:57:07

@ user3206440, @ Punintended łatwy sposób usuwania numerów wierszy istnieje: dodaj rows = NULL do wywołania do 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)

Obraz wykresu

Zobacz Gridextra Wiki .

 5
Author: Pedro Aphalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-22 20:21:00

@user3206440: znalazłem pracę, która usuwa numery wierszy. Sformatowałem moje dane jako macierz, przypisałem nazwy kolumn, a następnie wywołałem tableGrob bezpośrednio. Ilekroć miałem tableGrob nazwać to jako ramkę danych, nazwa wiersza utrzymywała się.

Poniżej znajduje się przykład. Jestem pewien, że jest łatwiejszy sposób, aby poradzić sobie z chisq.wyjście testowe

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

I Później...

annotation_custom(tableGrob(chidf), xmin=2, xmax=6, ymin=700, ymax=800)
 1
Author: Punintended,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-06 19:48:36

Wraz z wydaniem 'ggplot2' 3.0.0 i 'ggpmisc' 0.3.0 możliwa jest nowa prostsza odpowiedź:

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 w pełni obsługuje tibbles (zobacz release announcement), dzięki czemu możliwe jest odwzorowanie listy ramek danych na estetykę label. Nowa geom_table() w pakiecie 'ggpmisc 0.3.0' wykorzystuje to, umożliwiając dodawanie tabel o składni podobnej do składni geom_label() (Zobacz dokumentacja ). Tutaj najlepiej dodać stół jako adnotacja, ale oczywiście geom_table() może być również używana bezpośrednio, jak inne ggplot geometrie.

Tutaj wpisz opis obrazka

 1
Author: Pedro Aphalo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 09:31:43