mi è stato chiesto da uno studente se era possibile ricreare una trama simile a quella riportata di seguito utilizzando R:immagine personalizzata Aggiungendo a geom_polygon riempio ggplot
Questo è da this paper....
Questo genere di cose non è la mia specialità, ma usando il codice seguente sono stato in grado di creare ellissi del 95% CI e di tracciarle con geom_polygon()
. Ho riempito le immagini con le immagini che ho afferrato dalla libreria filetica utilizzando il pacchetto rphylopic
.
#example data/ellipses
set.seed(101)
n <- 1000
x1 <- rnorm(n, mean=2)
y1 <- 1.75 + 0.4*x1 + rnorm(n)
df <- data.frame(x=x1, y=y1, group="A")
x2 <- rnorm(n, mean=8)
y2 <- 0.7*x2 + 2 + rnorm(n)
df <- rbind(df, data.frame(x=x2, y=y2, group="B"))
x3 <- rnorm(n, mean=6)
y3 <- x3 - 5 - rnorm(n)
df <- rbind(df, data.frame(x=x3, y=y3, group="C"))
#calculating ellipses
library(ellipse)
df_ell <- data.frame()
for(g in levels(df$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y),
scale=c(sd(x),sd(y)),
centre=c(mean(x),mean(y))))),group=g))
}
#drawing
library(ggplot2)
p <- ggplot(data=df, aes(x=x, y=y,colour=group)) +
#geom_point(size=1.5, alpha=.6) +
geom_polygon(data=df_ell, aes(x=x, y=y,colour=group, fill=group), alpha=0.1, size=1, linetype=1)
### get center points of ellipses
library(dplyr)
ell_center <- df_ell %>% group_by(group) %>% summarise(x=mean(x), y=mean(y))
### animal images
library(rphylopic)
lion <- get_image("e2015ba3-4f7e-4950-9bde-005e8678d77b", size = "512")[[1]]
mouse <- get_image("6b2b98f6-f879-445f-9ac2-2c2563157025", size="512")[[1]]
bug <- get_image("136edfe2-2731-4acd-9a05-907262dd1311", size="512")[[1]]
### overlay images on center points
p + add_phylopic(lion, alpha=0.9, x=ell_center[[1,2]], y=ell_center[[1,3]], ysize=2, color="firebrick1") +
add_phylopic(mouse, alpha=1, x=ell_center[[2,2]], y=ell_center[[2,3]], ysize=2, color="darkgreen") +
add_phylopic(bug, alpha=0.9, x=ell_center[[3,2]], y=ell_center[[3,3]], ysize=2, color="mediumblue") +
theme_bw()
che dà il seguente:
Questo è ok, ma quello che mi piacerebbe davvero fare è aggiungere un'immagine direttamente al comando 'riempire' di geom_polygon. È possibile ?
suppongo la risposta ufficiale è "non è possibile" ([risposta di Hadley] (http://stackoverflow.com/a/2901210/1900149)). Tuttavia, c'è una risposta più recente di @baptiste [qui] (http://stackoverflow.com/questions/26110160/how-to-apply-cross-hatching-to-a-polygon-using-the-grid-graphical- sistema) che potrebbe rivelarsi utile. – tonytonov
Questo non è quello che stai chiedendo, ma nello spirito di "lo strumento giusto per il lavoro giusto": farei il grafico sottostante in R, con i dati dietro di esso. Quindi utilizzerei Photoshop, oppure è gratuito, open source quasi equivalente [GIMP] (http://www.gimp.org/). Quindi crea diversi livelli e regola i loro trasparenti per far passare la forma ovale. –