Je voudrais ajouter un tableau des coordonnées du site mis en évidence dans un ggplot.
En utilisant une précédente question comme exemple de données:
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)
Je voudrais ajouter le tableau suivant au coin inférieur droit de la parcelle dans la région de la parcelle. Aucun conseil?
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
Vous pouvez utiliser le ggplot2
de annotation_custom
avec une variable tableGrob
du paquetage 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)
@ user3206440, @Punintended Une méthode simple pour supprimer les numéros de ligne existe: ajoutez rows = NULL
à l'appel de 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)
S'il vous plaît voir le gridExtra Wiki .
Avec la publication de 'ggplot2' 3.0.0 et 'ggpmisc' 0.3.0, une nouvelle réponse plus simple est possible:
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 supporte pleinement les mots (voir release release ) permettant de mapper une liste de trames de données à l'esthétique label
. La nouvelle geom_table()
dans le package 'ggpmisc 0.3.0' en tire parti, rendant possible l'ajout de tableaux avec une syntaxe similaire à celle de geom_label()
(voir documentation ). Ici, il semble plus approprié d’ajouter le tableau en tant qu’annotation Mais, bien sûr, geom_table()
peut également être utilisé directement, comme autres géométries ggplot
.
@ user3206440: J'ai trouvé une solution de rechange qui supprime les numéros de ligne. J'ai formaté mes données sous forme de matrice, avec des noms de colonne attribués, puis appelée directement par tableGrob. Chaque fois que j'ai appelé tableGrob comme un cadre de données, le nom de la ligne persiste.
Ci-dessous un exemple. Je suis sûr qu'il existe un moyen plus simple de gérer la sortie 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")
Et puis plus tard ...
annotation_custom(tableGrob(chidf), xmin=2, xmax=6, ymin=700, ymax=800)