ggplot2: Adicionando o eixo x secundário transformado na parte superior do gráfico

[ Editar abril de 2016: a solução neste segmento não exibe mais o eixo adicionado corretamente - um novo segmento sobre esse problema foi aberto emggplot2 2.1.0 quebrou meu código? O eixo transformado secundário agora aparece incorretamente ]

Estou trabalhando com dados x em escala e preciso adicionar um eixo x sem escala na parte superior do gráfico para facilitar a interpretação. Eu me deparei com uma abordagem para adicionar um eixo y secundário emComo posso colocar uma escala transformada no lado direito de um ggplot2?. No entanto, não consigo fazê-lo funcionar corretamente no eixo x. Tenho certeza de que não estou entendendo alguma parte do código, mas não consigo descobrir o que é. Tentei procurar nos arquivos de ajuda do ggplot2 e também no livro ggplot2 da Wickham: Gráficos elegantes para análise de dados, mas se alguém puder me indicar uma documentação relevante, eu realmente aprecio isso!

Estou trabalhando com dados de temperatura, mas usarei os dados do lago no link acima, pois o código foi escrito para isso. Aqui está o código original desse link:

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)

Para testar um método para adicionar um eixo x em vez de eixo y, troquei os eixos xe y e altereiaxis-l paraaxis-b dar:

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)

Isso produz um novo eixo x, mas existem alguns problemas: 1) está no meio da plotagem 2) não produz um novo rótulo x para "Elevação (pés)"

Preciso que o eixo apareça na parte superior do gráfico e preciso de um rótulo de eixo associado. Alguém pode me dizer o que estou fazendo de errado?

Além disso, como mencionado acima, estou trabalhando com dados de temperatura em escala; portanto, idealmente, os ticks não se alinham nos eixos superior e inferior, como fazem neste exemplo. Existe alguma maneira de fazer isso no ggplot2? Um exemplo arbitrário da web é este:

questionAnswers(1)

yourAnswerToTheQuestion