Text unter dem von ggplot2 erzeugten Plot anzeigen

Ich versuche, einige Informationen über die Daten, die unterhalb der plot in ggplot2. Ich möchte, um den Verlauf der N Variablen, die mit der X-Achse Koordinate der Handlung, sondern die Y-Koordinate muss 10% von der Unterseite des Bildschirms . In der Tat, die gewünschte Y-Koordinaten sind bereits in den Daten-frame als y_pos variable.

Ich kann mir denken, 3 Ansätze mit ggplot2:

1) Erstellen Sie ein leeres Grundstück unterhalb der eigentlichen Handlung, die die gleiche Skala verwenden, und verwenden Sie dann geom_text, um den Verlauf der Daten über das leere Grundstück. Dieser Ansatz Art funktioniert, ist aber extrem kompliziert.

2) Verwenden geom_text zu zeichnen, die Daten aber irgendwie verwenden die y-Koordinate als Prozent des Bildschirms (10%). Diese zwingen würde, die zahlen angezeigt werden, unten die Handlung. Ich kann nicht herausfinden, die richtige syntax.

3) Verwenden Sie grid.text um den text anzuzeigen. Ich kann einfach legen Sie es auf die 10% aus dem unteren Rand des Bildschirms, aber ich kann nicht herausfinden, wie den X-coordindate entsprechend die Handlung. Ich habe versucht, grconvert zu erfassen, die anfangs-X-position, konnte aber keine, die so gut funktionieren.

Unten ist der grundlegende plot mit der dummy-Daten:

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

Den geänderten gplot unten zeigt die zahlen von Themen, aber Sie sind angezeigt, die INNERHALB der Handlung. Sie zwingen die Y-Skalierung erweitert werden. Ich möchte zeigen diese zahlen UNTER dem plot.

    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

Einen anderen Ansatz der Darstellung von Ziffern beinhaltet die Erstellung eines dummy-plot unterhalb der eigentlichen Handlung. Hier ist der 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 )

Aber das ist sehr kompliziert und schwer zu ändern, für die verschiedenen Daten. Im Idealfall würde ich mag in der Lage sein, um pass Y-Koordinaten als Prozent des Bildschirms.

InformationsquelleAutor der Frage Max C | 2012-04-04

Schreibe einen Kommentar