Ich versuche, einige Informationen zu den Daten unterhalb des Plots anzuzeigen, das in ggplot2 erstellt wurde. Ich möchte die N-Variable mit der Koordinate der X-Achse des Diagramms darstellen, aber die Y-Koordinate muss 10% vom unteren Rand des Bildschirms sein. Tatsächlich sind die gewünschten Y-Koordinaten bereits im Datenrahmen als Variable y_pos vorhanden.Anzeige von Text unterhalb des von ggplot2 generierten Plots
kann ich von 3 Ansätze denken ggplot2 mit:
1) Erstellen Sie ein leeres Grundstück unterhalb der eigentlichen Handlung, den gleichen Maßstab verwenden und dann geom_text verwenden, um die Daten über das leere Grundstück plotten. This approach Art von Arbeiten, ist aber sehr kompliziert.
2) Verwenden Sie geom_text
, um die Daten zu plotten, aber irgendwie Y-Koordinate als Prozent des Bildschirms (10%) verwenden. Dies würde dazu führen, dass die Zahlen unterhalb des Diagramms angezeigt werden. Ich kann die richtige Syntax nicht herausfinden.
3) Verwenden Sie grid.text, um den Text anzuzeigen. Ich kann es leicht auf die 10% von der Unterseite des Bildschirms einstellen, aber ich kann nicht herausfinden, wie die X-Koordinate auf den Plot passt. Ich habe versucht, grconvert zu verwenden, um die anfängliche X-Position zu erfassen, aber ich konnte auch nicht so funktionieren.
Unten ist das Basisstück mit den 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
Das modifizierte gplot unten zeigt die Anzahl von Subjekten, aber sie innerhalb der Handlung angezeigt werden. Sie zwingen die Y-Skala zu verlängern. Ich möchte diese Zahlen unterhalb der Handlung anzeigen.
Ein anderer Ansatz zur Anzeige der Zahlen besteht darin, ein Dummy-Diagramm unterhalb der tatsächlichen Darstellung zu erstellen. 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)
enter code here
Allerdings ist das sehr kompliziert und wäre schwer für verschiedene Daten zu ändern. Im Idealfall möchte ich Y-Koordinaten als Prozent des Bildschirms übergeben können. Vielen Dank im Voraus!
annotation_custom() und code [von hier] (http://stackoverflow.com/questions/9690648/point-clipped-on-x-axis-in-ggplot) könnte Ihnen helfen. Siehe unten. –
Siehe meine Antwort unten. Es ist definitiv einfacher als die angenommene Antwort. –
In den letzten Versionen von ggplot2 ist diese Funktion nun wie folgt integriert: http://stackoverflow.com/a/36036479/170352 –