ggplot2: Ajout secondaire transformée de l'axe des x sur le haut de la parcelle

[ Edition avril 2016: la solution dans ce thread n'affiche plus l'ajout de l'axe correctement - un nouveau fil de discussion sur ce sujet a été ouvert à la ggplot2 2.1.0 cassé mon code? Secondaire transformée axe maintenant s'affiche de façon incorrecte ]

Je suis en train de travailler à l'échelle x données, et la nécessité d'ajouter un non mis à l'échelle de l'axe x vers le haut de la parcelle pour en faciliter l'interprétation. Je suis venu à travers une approche pour l'ajout d'un secondaire un axe des y à Comment puis-je mettre une échelle transformée sur le côté droit d'un ggplot2?. Cependant, je ne peux pas le faire fonctionner correctement pour l'axe des abscisses. Je suis sûr que je ne suis pas la compréhension de certaines parties du code, mais je n'arrive pas à comprendre ce que c'est. J'ai essayé de regarder dans le ggplot2 fichiers d'aide, et aussi le Wickham livre ggplot2: Élégant Graphiques Pour l'Analyse de Données, mais si quelqu'un peut me diriger vers certains documents pertinents, je voudrais vraiment l'apprécier!

Je suis en train de travailler avec les données de température, mais je vais utiliser le lac des données à partir du lien ci-dessus que le code a été écrit pour que. Voici l'original du code à partir de ce lien:

library(ggplot2)
library(gtable)
library(grid)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
p1 <- ggplot(data=LakeLevels) + geom_line(aes(x=Day,y=Elevation)) + 
scale_y_continuous(name="Elevation (m)",limits=c(75,125))
p2<-ggplot(data=LakeLevels)+geom_line(aes(x=Day, y=Elevation))+
scale_y_continuous(name="Elevation (ft)", limits=c(75,125),           
breaks=c(80,90,100,110,120),
labels=c("262", "295", "328", "361", "394"))
#extract gtable
g1<-ggplot_gtable(ggplot_build(p1))
g2<-ggplot_gtable(ggplot_build(p2))
#overlap the panel of the 2nd plot on that of the 1st plot
pp<-c(subset(g1$layout, name=="panel", se=t:r))
g<-gtable_add_grob(g1, g2$grobs[[which(g2$layout$name=="panel")]], pp$t, pp$l, pp$b, 
pp$l)
ia <- which(g2$layout$name == "axis-l")
ga <- g2$grobs[[ia]]
ax <- ga$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")
g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)
g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
# draw it
grid.draw(g)

De tester une méthode pour l'ajout d'un axe x à la place de l'axe des y, j'ai changé les axes x et y et changé axis-l à axis-b à donner:

library(ggplot2)
library(gtable)
library(grid)
LakeLevels<-data.frame(Day=c(1:365),Elevation=sin(seq(0,2*pi,2*pi/364))*10+100)
p1 <- ggplot(data=LakeLevels) + geom_line(aes(x=Elevation,y=Day)) + 
scale_x_continuous(name="Elevation (m)",limits=c(75,125))
p2<-ggplot(data=LakeLevels)+geom_line(aes(x=Elevation, y=Day))+
scale_x_continuous(name="Elevation (ft)", limits=c(75,125),           
breaks=c(80,90,100,110,120),
labels=c("262", "295", "328", "361", "394"))
#extract gtable
g1<-ggplot_gtable(ggplot_build(p1))
g2<-ggplot_gtable(ggplot_build(p2))
#overlap the panel of the 2nd plot on that of the 1st plot
pp<-c(subset(g1$layout, name=="panel", se=t:r))
g<-gtable_add_grob(g1, g2$grobs[[which(g2$layout$name=="panel")]], pp$t, pp$l, pp$b, 
pp$l)
ia <- which(g2$layout$name == "axis-b")
ga <- g2$grobs[[ia]]
ax <- ga$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")
g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)
g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
# draw it
grid.draw(g)

Ce produit l'axe des x, mais il ya un couple de problèmes:
1) c'est dans le milieu de l'intrigue
2) il n'est pas de produire un nouveau x-label de "l'Altitude (ft)"

J'ai besoin de l'axe s'affiche en haut de l'intrigue, et j'ai besoin d'un associé des étiquettes de l'axe. Quelqu'un peut-il me dire ce que je fais de mal?

Aussi, comme mentionné ci-dessus, je suis en train de travailler à l'échelle des données de température, donc, idéalement, les tiques ne serait pas aligner sur le haut et le bas axes comme dans cet exemple. Est-il un moyen de le faire dans ggplot2? Un exemple au hasard à partir du web est: est-ce

ggplot2: Ajout secondaire transformée de l'axe des x sur le haut de la parcelle

OriginalL'auteur Thomas | 2014-01-09