Anzeigen von Text unter dem von ggplot2 generierten Plot

Ich versuche, einige Informationen zu den Daten unterhalb des in erstellten Diagramms anzuzeigenggplot2. Ich möchte die Variable N mit der X-Achsen-Koordinate des Diagramms zeichnen, aber die Y-Koordinate muss 10% vom unteren Bildschirmrand entfernt sein. Tatsächlich sind die gewünschten Y-Koordinaten bereits als y_pos-Variable im Datenrahmen enthalten.

Ich kann mir 3 Ansätze überlegenggplot2:

1) Erstellen Sie ein leeres Diagramm unterhalb des tatsächlichen Diagramms, verwenden Sie denselben Maßstab und verwenden Sie dann geom_text, um die Daten über das leere Diagramm zu zeichnen.Dieser Ansatz Art von Arbeiten, ist aber äußerst kompliziert.

2) Verwenden Siegeom_text um die Daten zu zeichnen, benutze aber irgendwie die y-Koordinate als Prozent des Bildschirms (10%). Dies würde die Anzeige der Zahlen unter dem Plot erzwingen. Ich kann die richtige Syntax nicht herausfinden.

3) Verwenden Sie grid.text, um den Text anzuzeigen. Ich kann es leicht auf 10% vom unteren Rand des Bildschirms einstellen, aber ich kann nicht herausfinden, wie die X-Koordinate eingestellt ist, um mit der Darstellung übereinzustimmen. Ich habe versucht, grconvert zu verwenden, um die anfängliche X-Position zu erfassen, aber es gelang mir nicht, dass dies auch funktioniert.

Unten ist das Grunddiagramm mit den Dummy-Daten:

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

Der geänderte Plot unten zeigt die Anzahl der Probanden an, sie werden jedoch IM Plot angezeigt. Sie erzwingen die Verlängerung der Y-Skala. Ich möchte diese Zahlen UNTER dem Plot anzeigen.

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

Ein anderer Ansatz zum Anzeigen der Zahlen besteht darin, ein Dummy-Diagramm unterhalb des tatsächlichen Diagramms zu erstellen. Hier ist der Code:

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

Dies ist jedoch sehr kompliziert und für unterschiedliche Daten nur schwer zu ändern. Idealerweise möchte ich Y-Koordinaten als Prozent des Bildschirms übergeben können.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage