Please download the data here!Wie mehrere ggplot2 Plots auszurichten und sie Schatten über alle
Ziel hinzufügen: Plot ein Bild wie folgt aus:
Eigenschaften: 1 zwei verschiedene Zeitreihen; 2. das untere Feld hat eine umgekehrte y-Achse; 3. Schatten über zwei Plots.
Mögliche Lösungen:
1. Facettierung nicht geeignet ist - (1) kann nicht nur eine Facette der y-Achse machen umkehren, während die andere (n) unchanges halten. (2) schwierig, die einzelnen Facetten einzeln einzustellen.
2. Ansichtsfenster Mit einzelnen Parzellen ordnen Sie die folgenden Codes:
library(ggplot2)
library(grid)
library(gridExtra)
##Import data
df<- read.csv("D:\\R\\SF_Question.csv")
##Draw individual plots
#the lower panel
p1<- ggplot(df, aes(TIME1, VARIABLE1)) + geom_line() + scale_y_reverse() + labs(x="AGE") + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000))
#the upper panel
p2<- ggplot(df, aes(TIME2, V2)) + geom_line() + labs(x=NULL) + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000)) + theme(axis.text.x=element_blank())
##For the shadows
#shadow position
rects<- data.frame(x1=c(1100,1800),x2=c(1300,1850),y1=c(0,0),y2=c(100,100))
#make shadows clean (hide axis, ticks, labels, background and grids)
xquiet <- scale_x_continuous("", breaks = NULL)
yquiet <- scale_y_continuous("", breaks = NULL)
bgquiet<- theme(panel.background = element_rect(fill = "transparent", colour = NA))
plotquiet<- theme(plot.background = element_rect(fill = "transparent", colour = NA))
quiet <- list(xquiet, yquiet, bgquiet, plotquiet)
prects<- ggplot(rects,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2))+ geom_rect(alpha=0.1,fill="blue") + coord_cartesian(xlim = c(1000, 2000)) + quiet
##Arrange plots
pushViewport(viewport(layout = grid.layout(2, 1)))
vplayout <- function(x, y)
viewport(layout.pos.row = x, layout.pos.col = y)
#arrange time series
print(p2, vp = vplayout(1, 1))
print(p1, vp = vplayout(2, 1))
#arrange shadows
print(prects, vp=vplayout(1:2,1))
Probleme:
- die x-Achse ausrichten nicht richtig;
- die Schattenpositionen sind falsch (wegen der falschen Anordnung der x-Achse).
Denn um Googeln:
- Ich bemerkte zunächst, dass "align.plots() von ggExtra" diesen Job machen könnte. Es wurde jedoch vom Autor abgelehnt;
- Dann habe ich versucht, die gglayout solution, aber kein Glück - ich konnte sogar nicht die "topaktuelle" Paket installieren;
Schließlich habe ich versucht, die gtable solution mit dem folgenden Code:
gp1<- ggplot_gtable(ggplot_build(p1)) gp2<- ggplot_gtable(ggplot_build(p2)) gprects<- ggplot_gtable(ggplot_build(prects)) maxWidth = unit.pmax(gp1$widths[2:3], gp2$widths[2:3], gprects$widths[2:3]) gp1$widths[2:3] <- maxWidth gp2$widths[2:3] <- maxWidth gprects$widths[2:3] <- maxWidth grid.arrange(gp2, gp1, gprects)
nun die x-Achse der oberen und unteren Platte richtig tun auszurichten. Aber die Schattenpositionen sind immer noch falsch. Und noch wichtiger: Ich kann den Schatten-Plot auf den beiden Zeitreihen nicht überlappen. Nach mehreren Tagen versuche ich fast aufzugeben ...
Könnte mir jemand hier helfen?
Haben Sie diese Art von Graphen häufig zu tun haben? Für mich sieht es so aus, als hätte das Original, das Sie gepostet haben, nur ein Overlay von MS Paint oder einer anderen solchen Fotobearbeitungssoftware. –
Sie können wahrscheinlich zwei Graphen zusammensetzen und die Rechtecke mit dem 'grid'-Paket überlagern. –
** @ Brandon **: Ja, als Paläoklimatologie-Typ ist es sehr oft notwendig, mehrere Zeitreihen zu vergleichen und die interessanten Teile auf einer Handlung zu markieren. Normalerweise verwende ich Golden Software Grapher, um diese Aufgabe zu erledigen. Es ist zeitaufwendig, weil Sie immer wieder so viele Eigenschaften einstellen müssen. Deshalb versuche ich R. ** @ Sebastián **: Vielen Dank, das Bild anzubringen, es ist wirklich hilfreich! Und mir ist das Grid-Paket nicht sehr vertraut. Wie auch immer, ich werde es versuchen. – bearcat