Vários pontos de dados em um gráfico R GGPlot2
Pergunta
Eu tenho dois conjuntos de pontos de dados relacionados ao mesmo eixo primário, mas que diferem no eixo secundário. Existe alguma maneira de plotá -los em cima um do outro em r usando GGPlot2?
O que estou procurando é basicamente algo que se parece com o seguinte:
4+ | | x . + 220 3+ . . | | x | 2+ . + 210 | x | 1+ . x x | | + 200 0+-+-+-+-+-+-+ time . temperatur x car sale
(Este é apenas um exemplo de dados possíveis)
Solução
Não sou especialista nisso, mas é meu entendimento que isso é possível com a treliça, mas não com o GGPlot2. Veja esta postagem do blog leanr Para um exemplo de um gráfico do eixo secundário. Veja também a resposta de Hadley a esta pergunta.
Aqui está um exemplo de como fazê -lo em treliça (de Gabor Grothendieck):
library(lattice)
library(grid) # needed for grid.text
# data
Lines.raw <- "Date Fo Co
6/27/2007 57.1 13.9
6/28/2007 57.7 14.3
6/29/2007 57.8 14.3
6/30/2007 57 13.9
7/1/2007 57.1 13.9
7/2/2007 57.2 14.0
7/3/2007 57.3 14.1
7/4/2007 57.6 14.2
7/5/2007 58 14.4
7/6/2007 58.1 14.5
7/7/2007 58.2 14.6
7/8/2007 58.4 14.7
7/9/2007 58.7 14.8
"
# in reality next stmt would be DF <- read.table("myfile.dat", header = TRUE)
DF <- read.table(textConnection(Lines.raw), header = TRUE)
DF$Date <- as.Date(DF$Date, "%m/%d/%Y")
par.settings <- list(
layout.widths = list(left.padding = 10, right.padding = 10),
layout.heights = list(bottom.padding = 10, top.padding = 10)
)
xyplot(Co ~ Date, DF, default.scales = list(y = list(relation = "free")),
ylab = "C", par.settings = par.settings)
trellis.focus("panel", 1, 1, clip.off = TRUE)
pr <- pretty(DF$Fo)
at <- 5/9 * (pr - 32)
panel.axis("right", at = at, lab = pr, outside = TRUE)
grid.text("F", x = 1.1, rot = 90) # right y axis label
trellis.unfocus()
Outras dicas
A resposta de Shane, "Você não pode no GGPlot2", está correto, se incompleto. Indiscutivelmente, não é algo que você querer façam. Como você decide como escalar o eixo y? Você quer que os meios das linhas sejam iguais? O intervalo? Não existe uma maneira de fazer isso, e é muito fácil fazer com que os resultados pareçam qualquer coisa que você queira que eles se pareçam. Em vez disso, o que você pode querer fazer, especialmente em uma série temporal como essa, é normar as duas linhas de dados para que em um valor específico de t, geralmente min (t), y1 = y2 = 100. Aqui está um exemplo Eu saí do Blog de Bonddad (Não usando o GGPlot2, e é por isso que é feio!), Mas você pode informar o aumento e diminuir relativos das duas linhas, que têm escalas subjacentes completamente diferentes.