En ggplot2, coord_flip y las escalas libres no funcionan juntas
Aquí hay algunos datos de ejemplo para un metaanálisis hipotético sobre la efectividad de las intervenciones de promoción deportiva para las cuales me gustaría crear una parcela forestal:
example.df = data.frame(Author = c("McAuliffe et al.", "Palen et al.", "Manning et al.", "Richters et al.", "Grello et al.","Mpofu et al.", "Kuo & St Lawrence", "Langstrom & Hanson", "Ompad et al.", "Abdullah et al.","Yan", "Peltzer & Pengpid", "Lo & Wei", "Haggstrom-Nordin et al.", "Mwaba & Naidoo", "Hughes et al.","Lydie et al.", "Zimmer-Gembeck et al.", "Babalola", "Garos et al.", "Pinkerton et al."),
Sport = c("Basketball", "Basketball", "Baseball", "Dance", "Baseball", "Dance", "Wrestling","Wrestling", "Dance", "Baseball", "Wrestling", "Dance", "Swimming", "Swimming","Basketball", "Basketball", "Basketball", "Basketball", "Basketball", "Swimming", "Wrestling"),
Gender = c("Male", "Female", "Male", "Male", "Female", "Male", "Male", "Male", "Male", "Female","Female", "Male", "Female", "Female", "Female", "Male", "Female", "Female", "Female", "Male", "Female"),
d = c(-0.12, 0.53, 0.11, 0.02, 0.32, 0.04, 0.03,0.04,0.26, 0.76, 1.11, 0.34, 0.77, 1.19, 0.59, 0.15, 0.30, 0.81, 0.12, 0.11, 1.01),
d_SE = c(.10, .04, .06, .01, .11, .08, .08, .04, .05, .05, .14, .07, .05, .08, .19, .16, .07, .16, .06, .18, .15))
El marco de datos contiene los nombres de los autores, el deporte, si la muestra era masculina o femenina, el tamaño del efecto de la intervención y el error estándar del tamaño del efecto. Espero crear una forma de mapeo de diagrama de puntos para el género, y facetar por el deporte en particular. Después de seguir ejemplos en el "libro de cocina" de Chang yesta consulta relacionada, Se me ocurrió el siguiente código que satisface la mayoría de mis necesidades de formato:
p<-ggplot(example.df, aes(x=Author, y=d, ymin=d-1.96*d_SE, ymax=d+1.96*d_SE,shape=Gender))+
geom_pointrange() +
coord_flip()+
scale_y_continuous(limits=c(-2,2),breaks=c(-2,-1.5,-1,-0.5,0,.5,1,1.5,2))+
geom_hline(yintercept=0, color="grey60",linetype="dashed")+
theme_bw()+
theme(panel.grid.major.x=element_blank(),panel.grid.minor.x=element_blank(),panel.grid.major.y=element_line(color="grey60",linetype="dashed"))+
facet_grid(Sport ~ ., scales="free_y")
p
Sin embargo, mi problema es que las gráficas resultantes para cada faceta (a continuación) tienen a cada autor en todo el marco de datos trazado en el eje y (técnicamente el eje x, pero los ejes están invertidos). En cambio, solo quiero que los autores con datos relevantes para una faceta dada se tracen en el eje de esa faceta asociado al autor, por lo que cada faceta debe tener una lista diferente de autores en el eje.
Pensé que elscales="free_y"
componente de lafacet_grid
capa aseguraría un eje de autor único para cada faceta (también he intentadoscales="free_x"
, dados los ejes invertidos), pero esto no tiene el efecto deseado.
¿Alguien sabe de alguna manera que podría asegurar que los únicos nombres de autores que aparecen en el eje de cada faceta son los que tienen datos asociados para esa faceta?