Adicionar linhas em xyplot multipaneis

Caros amigos estou criando um gráfico utilizando o pacote látice e a função xyplot(). O gráfico é composto de dois paneis um contendo dados de temperatura e humidade em função da data do ano. Eu tenho as variáveis de temperatura (minima,maxima e média) e humidade relativa (minima, maxima e média). Eu fiz os gráficos da temperatura e humidade média em função da data e gostaria de adicionar os valores de máximo e mínimo dentro dos respectivos paneis. Eu utilizei a função (exemplo) panel= panel.lines (x,dados$TEMPMAX) associado a funçao prepanel, no entanto o linha de temperatura máxima foi colocada tanto no panel de temperatura quanto no panel de humidade relativa. Fiz uma busca na internet e não encontrei nada que pudesse solucionar meu problema. Como eu posso fazer para adicionar as linhas TEMPMAX e TEMPMIN S somente no panel de temperatura e URAMAX E URAMIN somente no panel de humidade relativa? dados<- structure(list(DATA = structure(c(14485, 14486, 14487, 14488, 14489, 14490, 14491, 14492, 14493, 14494, 14495, 14496, 14497, 14498, 14499, 14500, 14501, 14502, 14503, 14504, 14505, 14506, 14507, 14508, 14509, 14510, 14511, 14512, 14513, 14514, 14515, 14516, 14517, 14518, 14519, 14520, 14523, 14524, 14525, 14526, 14527, 14528, 14529, 14530, 14531, 14532, 14533, 14534, 14535, 14536), class = "Date"), TEMPMIN = c(11.85, 11.85, 13.65, 17.9, 18.45, 18.6, 19.6, 19.2, 19.8, 17.8, 18.7, 18.7, 15.5, 15.55, 15.65, 16.4, 18.7, 18.15, 17.55, 17.85, 18.75, 20.95, 19.3, 19.35, 19.4, 18.8, 17.65, 17.75, 16.45, 16.95, 18.4, 21.1, 18.2, 18.05, 18.05, 18.55, 19.95, 20.7, 18.6, 18.6, 16.9, 17.15, 18.6, 20.8, 18.1, 19.85, 19.85, 20.45, 20.4, 19), TEMPMAX = c(28.05, 28.05, 28.3, 30, 30.9, 30.8, 30.35, 31.2, 27.25, 27.9, 31.3, 31.3, 28.6, 28.25, 29.7, 31.05, 31.95, 32.75, 30.7, 31.65, 32.85, 32.65, 33.2, 33.05, 24.7, 24.35, 24.95, 28, 28.15, 30.9, 33.1, 34.95, 26.65, 28.55, 28.55, 32.45, 31.7, 31.4, 23.4, 23.4, 27.95, 28.05, 30.45, 29.6, 31.2, 33.45, 33.45, 30.4, 28.6, 29.95), URAMIN = c(38, 38, 37, 40, 41.5, 43, 42.5, 41, 54, 61.5, 44.5, 44.5, 41.5, 41, 19.5, 19, 18, 19.5, 26.5, 19.5, 19.5, 20, 25.5, 29, 70, 71.5, 42.5, 50, 44, 31, 23, 15.65, 46.5, 46, 46, 32.5, 27, 31.5, 76, 76, 44.5, 44, 36.5, 45.5, 34, 25.5, 25.5, 49.5, 55.5, 52.5), URAMAX = c(89, 89, 89, 94, 91, 91, 96.5, 94.5, 99, 99, 95.5, 95.5, 91, 93, 80.5, 76.5, 74.5, 74.5, 75.5, 77, 76, 80, 88, 92, 94, 93.5, 94, 91.5, 85.5, 83.5, 79, 51.75, 77.5, 81, 81, 91.5, 86.5, 88.5, 92.5, 92.5, 84, 85, 82, 86, 80, 90, 90, 95, 90.5, 97), TEMPMED = c(19.95, 19.95, 20.975, 23.95, 24.675, 24.7, 24.975, 25.2, 23.525, 22.85, 25, 25, 22.05, 21.9, 22.675, 23.725, 25.325, 25.45, 24.125, 24.75, 25.8, 26.8, 26.25, 26.2, 22.05, 21.575, 21.3, 22.875, 22.3, 23.925, 25.75, 28.025, 22.425, 23.3, 23.3, 25.5, 25.825, 26.05, 21, 21, 22.425, 22.6, 24.525, 25.2, 24.65, 26.65, 26.65, 25.425, 24.5, 24.475), URAMED = c(63.5, 63.5, 63, 67, 66.25, 67, 69.5, 67.75, 76.5, 80.25, 70, 70, 66.25, 67, 50, 47.75, 46.25, 47, 51, 48.25, 47.75, 50, 56.75, 60.5, 82, 82.5, 68.25, 70.75, 64.75, 57.25, 51, 33.7, 62, 63.5, 63.5, 62, 56.75, 60, 84.25, 84.25, 64.25, 64.5, 59.25, 65.75, 57, 57.75, 57.75, 72.25, 73, 74.75), ITH = c(65.88425, 65.88425, 67.355125, 71.62425, 72.664625, 72.7005, 73.095125, 73.418, 71.014375, 70.04575, 73.131, 73.131, 68.89775, 68.6825, 69.794625, 71.301375, 73.597375, 73.77675, 71.875375, 72.77225, 74.279, 75.714, 74.92475, 74.853, 68.89775, 68.216125, 67.8215, 70.081625, 69.2565, 71.588375, 74.20725, 77.471875, 69.435875, 70.6915, 70.6915, 73.8485, 74.314875, 74.63775, 67.391, 67.391, 69.435875, 69.687, 72.449375, 73.418, 72.62875, 75.49875, 75.49875, 73.740875, 72.4135, 72.377625)), .Names = c("DATA", "TEMPMIN", "TEMPMAX", "URAMIN", "URAMAX", "TEMPMED", "URAMED", "ITH"), row.names = c(NA, 50L), class = "data.frame") library(lattice) #-ítulo dos gráficos humidade <- "Relative Humidity (%)" temperatura <- as.expression(expression( paste("Average Air Temperature(", degree*C, ")") )) #--Personalização do cabeçario dos gráficos # (NB the colour used is the default lattice strip background colour) my.strip <- function(which.given, which.panel, ...) { strip.labels <- c(temperatura,humidade) panel.rect(0,0, 1, 1, col="gray95", border=1) panel.text(x=0.5, y=0.5, adj=c(0.5, 0.55), cex=0.95, lab=strip.labels[which.panel[which.given]]) } #--Intervalo do eixo X xlim <- range(as.Date(dados$DATA,format="%d/%m/%y",tz="UTC")) #--marcadores para as linhas grid d <- seq(from=as.Date("2009-08-29"), to=as.Date("2009-12-04"), by=365/4) #--Definição das cores das linhas col.raw <- "gray0" #colset[2] } see note above col.smo <-"gray80" #colset[1] } col.lm <- "grey20" #--Criação dos gráficos xyplot(TEMPMED +URAMED ~DATA, data=dados, scales=list(y="free", rot=0), xlim=xlim, strip=my.strip, outer=TRUE, layout=c(1, 2, 1), ylab="",xlab=NULL, panel=function(x, y, ...) { panel.fill(col ="gray100") #define a cor de fundo do panel panel.xyplot(x, y, ..., type="l", col=col.raw, lwd=1.0) # x~y panel.loess(x, y, ..., col=col.smo, span=0.14, lwd=1) # smoothed data panel.grid(h=-1,v=-1) }, key=list(text=list(c("raw data", "smoothed curve")), col=c(col.raw, col.smo), lty=c(1, 1), columns=2, cex=0.95, lines=TRUE ), )

Segue minha sugestão. require(latticeExtra) ## É possível fazer com layer mais aí tem-se que estar atento à ## amplitude dos eixos. xyplot(URAMED+TEMPMED~DATA, dados, outer=TRUE, scales=list(y="free"))+ layer(with(dados, panel.lines(URAMIN~DATA)), packets=1)+ layer(with(dados, panel.lines(URAMAX~DATA)), packets=1) ## Melhor e dispor os dados de uma forma mais conveniente. str(dados) tem <- subset(dados, select=c(DATA, TEMPMED, TEMPMIN, TEMPMAX)) umi <- subset(dados, select=c(DATA, URAMED, URAMIN, URAMAX)) names(tem)[2:4] <- names(umi)[2:4] <- c("med","min","max") tem$var <- "temp" umi$var <- "umid" da <- rbind(tem, umi) str(da) xyplot(med+min+max~DATA|var, data=da, scales=list(y="free"), type="l", lty=c(1,2,2), col=c("black","gray50","gray50")) À disposição. Walmes.

Obrigado Walmes! Fico impressionado com a forma como você simplifica as coisas. Abraços On 15-10-2014 23:37, walmes . wrote:
Segue minha sugestão.
require(latticeExtra)
## É possível fazer com layer mais aí tem-se que estar atento à ## amplitude dos eixos.
xyplot(URAMED+TEMPMED~DATA, dados, outer=TRUE, scales=list(y="free"))+ layer(with(dados, panel.lines(URAMIN~DATA)), packets=1)+ layer(with(dados, panel.lines(URAMAX~DATA)), packets=1)
## Melhor e dispor os dados de uma forma mais conveniente. str(dados)
tem <- subset(dados, select=c(DATA, TEMPMED, TEMPMIN, TEMPMAX)) umi <- subset(dados, select=c(DATA, URAMED, URAMIN, URAMAX)) names(tem)[2:4] <- names(umi)[2:4] <- c("med","min","max") tem$var <- "temp" umi$var <- "umid"
da <- rbind(tem, umi) str(da)
xyplot(med+min+max~DATA|var, data=da, scales=list(y="free"), type="l", lty=c(1,2,2), col=c("black","gray50","gray50"))
À disposição. Walmes.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Algumas alternativas: library(ggplot2) ## Ex1: ## dados e' o seu conjunto de dados original ggplot(dados, aes(DATA)) + geom_ribbon(aes(ymax=TEMPMAX, ymin=TEMPMIN), fill='grey70', colour='black') + geom_line(aes(y=TEMPMED)) ## nesse caso vc faria dois graficos separados ## Ex2: ## da e' o data.frame criado pelo Walmes ggplot(da, aes(DATA)) + geom_ribbon(aes(ymax=max, ymin=min), fill='grey70', colour='black') + geom_line(aes(y=med)) + facet_wrap(~var, scales='free_y') ##Ex3: ## da e' o data.frame do Walmes ggplot(da, aes(DATA)) + geom_ribbon(aes(ymax=max, ymin=min), colour='black', alpha=0) + geom_line(aes(y=med)) + facet_wrap(~var, scales='free_y') ##Ex4: ## de novo ggplot(da, aes(DATA)) + geom_ribbon(aes(ymax=max, ymin=min), fill='grey70') + geom_line(aes(y=med)) + facet_wrap(~var, scales='free_y') Em 16 de outubro de 2014 09:55, Fernando Souza <nandodesouza@gmail.com> escreveu:
Obrigado Walmes! Fico impressionado com a forma como você simplifica as coisas.
Abraços
On 15-10-2014 23:37, walmes . wrote:
Segue minha sugestão.
require(latticeExtra)
## É possível fazer com layer mais aí tem-se que estar atento à ## amplitude dos eixos.
xyplot(URAMED+TEMPMED~DATA, dados, outer=TRUE, scales=list(y="free"))+ layer(with(dados, panel.lines(URAMIN~DATA)), packets=1)+ layer(with(dados, panel.lines(URAMAX~DATA)), packets=1)
## Melhor e dispor os dados de uma forma mais conveniente. str(dados)
tem <- subset(dados, select=c(DATA, TEMPMED, TEMPMIN, TEMPMAX)) umi <- subset(dados, select=c(DATA, URAMED, URAMIN, URAMAX)) names(tem)[2:4] <- names(umi)[2:4] <- c("med","min","max") tem$var <- "temp" umi$var <- "umid"
da <- rbind(tem, umi) str(da)
xyplot(med+min+max~DATA|var, data=da, scales=list(y="free"), type="l", lty=c(1,2,2), col=c("black","gray50","gray50"))
À disposição. Walmes.
_______________________________________________ R-br mailing listR-br@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (3)
-
Benilton Carvalho
-
Fernando Souza
-
walmes .