Exibindo o texto abaixo da plotagem gerada pelo ggplot2
Estou tentando exibir algumas informações sobre os dados abaixo do gráfico criado emggplot2. Eu gostaria de plotar a variável N usando a coordenada do eixo X do gráfico, mas a coordenada Y precisa ser 10% da parte inferior da tela. De fato, as coordenadas Y desejadas já estão no quadro de dados como variável y_pos.
Eu posso pensar em 3 abordagens usandoggplot2:
1) Crie um gráfico vazio abaixo do gráfico real, use a mesma escala e, em seguida, use geom_text para plotar os dados sobre o gráfico em branco.Essa abordagem funciona, mas é extremamente complicado.
2) Usegeom_text
para traçar os dados, mas de alguma forma use coordenada y como porcentagem da tela (10%). Isso forçaria os números a serem exibidos abaixo do gráfico. Eu não consigo descobrir a sintaxe adequada.
3) Use grid.text para exibir o texto. Eu posso facilmente configurá-lo nos 10% da parte inferior da tela, mas não consigo definir como definir a coordenada X para corresponder ao gráfico. Eu tentei usar o grconvert para capturar a posição X inicial, mas não consegui fazer isso funcionar também.
Abaixo está o gráfico básico com os dados fictícios:
<code>graphics.off() # close graphics windows library(car) library(ggplot2) #load ggplot library(gridExtra) #load Grid library(RGraphics) # support of the "R graphics" book, on CRAN #create dummy data test= data.frame( Group = c("A", "B", "A","B", "A", "B"), x = c(1 ,1,2,2,3,3 ), y = c(33,25,27,36,43,25), n=c(71,55,65,58,65,58), y_pos=c(9,6,9,6,9,6) ) #create ggplot p1 <- qplot(x, y, data=test, colour=Group) + ylab("Mean change from baseline") + geom_line()+ scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) + opts( legend.position=c(.1,0.9)) #display plot p1 </code>
O gplot modificado abaixo exibe números de assuntos, porém eles são exibidos dentro da plotagem. Eles forçam a escala Y a ser estendida. Eu gostaria de exibir esses números abaixo do enredo.
<code> p1 <- qplot(x, y, data=test, colour=Group) + ylab("Mean change from baseline") + geom_line()+ scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) + opts( plot.margin = unit(c(0,2,2,1), "lines"), legend.position=c(.1,0.9))+ geom_text(data = test,aes(x=x,y=y_pos,label=n)) p1 </code>
Uma abordagem diferente de exibir os números envolve a criação de um gráfico falso abaixo do gráfico real. Aqui está o código:
<code>graphics.off() # close graphics windows library(car) library(ggplot2) #load ggplot library(gridExtra) #load Grid library(RGraphics) # support of the "R graphics" book, on CRAN #create dummy data test= data.frame( group = c("A", "B", "A","B", "A", "B"), x = c(1 ,1,2,2,3,3 ), y = c(33,25,27,36,43,25), n=c(71,55,65,58,65,58), y_pos=c(15,6,15,6,15,6) ) p1 <- qplot(x, y, data=test, colour=group) + ylab("Mean change from baseline") + opts(plot.margin = unit(c(1,2,-1,1), "lines")) + geom_line()+ scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) + opts(legend.position="bottom", legend.title=theme_blank(), title.text="Line plot using GGPLOT") p1 p2 <- qplot(x, y, data=test, geom="blank")+ ylab(" ")+ opts( plot.margin = unit(c(0,2,-2,1), "lines"), axis.line = theme_blank(), axis.ticks = theme_segment(colour = "white"), axis.text.x=theme_text(angle=-90,colour="white"), axis.text.y=theme_text(angle=-90,colour="white"), panel.background = theme_rect(fill = "transparent",colour = NA), panel.grid.minor = theme_blank(), panel.grid.major = theme_blank() )+ geom_text(data = test,aes(x=x,y=y_pos,label=n)) p2 grid.arrange(p1, p2, heights = c(8.5, 1.5), nrow=2 ) </code>
No entanto, isso é muito complicado e seria difícil de modificar para dados diferentes. Idealmente, gostaria de poder passar coordenadas Y como porcentagem da tela.