Wyświetlanie tekstu poniżej wykresu wygenerowanego przez ggplot2

Próbuję wyświetlić informacje o danych poniżej wykresu utworzonego wggplot2. Chciałbym narysować zmienną N za pomocą współrzędnej osi X wykresu, ale współrzędna Y musi wynosić 10% od dołu ekranu. W rzeczywistości pożądane współrzędne Y są już w ramce danych jako zmienna y_pos.

Mogę myśleć o 3 podejściachggplot2:

1) Utwórz pusty wykres poniżej rzeczywistego wykresu, użyj tej samej skali, a następnie użyj geom_text, aby narysować dane na pustym wykresie.To podejście rodzaj prac, ale jest niezwykle skomplikowany.

2) Użyjgeom_text aby narysować dane, ale w jakiś sposób użyj współrzędnej y jako procentu ekranu (10%). Zmusiłoby to do wyświetlenia liczb poniżej wykresu. Nie potrafię znaleźć właściwej składni.

3) Użyj grid.text, aby wyświetlić tekst. Mogę łatwo ustawić go na 10% od dołu ekranu, ale nie mogę zrozumieć, jak ustawić współrzędną X, aby pasowała do wykresu. Próbowałem użyć grconvert do przechwycenia początkowej pozycji X, ale nie mogłem również tego uruchomić.

Poniżej znajduje się podstawowy wykres z danymi atrapowymi:

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

Zmodyfikowany gplot poniżej wyświetla liczby obiektów, jednak są one wyświetlane WEWNĄTRZ wykresu. Wymuszają wydłużenie skali Y. Chciałbym wyświetlić te liczby PONIŻEJ wykresu.

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

Inne podejście do wyświetlania liczb polega na utworzeniu fałszywego wykresu poniżej rzeczywistego wykresu. Oto kod:

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

Jest to jednak bardzo skomplikowane i trudne do zmodyfikowania dla różnych danych. W idealnej sytuacji chciałbym móc przekazać współrzędne Y jako procent ekranu.

questionAnswers(4)

yourAnswerToTheQuestion