Archive

Posts Tagged ‘xtable’

Animações em documentos PDF produzidos com Sweave

Animação que representa as probabilidades obtidas pela tabela da distribuição normal padrão.

O pacote do animate do \LaTeX, desenvolvido por Alexander Grahn, permite que sejam inseridas animações em documentos PDF. Esses arquivos devem ser visualizados em leitores de PDF da Adobe. No Linux podemos usar o acroread.

O procedimento é simples. Vou fazer isso em um documento Sweave. Primeiro confeccionamos diversas figuras que formam uma seqüência de ações. Tais figuras podem ser feitas com controladores de fluxo como a função for() e similares. Inclusive, o pacote animation do R, desenvolvido por Yihui Xie, oferece implementações para confecção de animações. As figuras são salvas em um diretório. Para adicioná-las ao documento na forma de animação (com botões de play, stop) basta usar o comando \animategraphics{}.

O arquivo Sweave abaixo (*.Rnw) gera um arquivo PDF com a tabela da distribuição normal padrão e uma animação que representa a área integrada correspondente aos valores da tabela. Veja o PDF. Para gerar gifs animados como R veja o artigo do Mark Heckmann no R you ready?. Até a próxima ridícula.

\documentclass[a4paper]{article}
\usepackage[brazil]{babel}
\usepackage{Sweave}
\usepackage{animate}
\thispagestyle{empty}

\begin{document}

\begin{center}
{\Large Tabela da distribui\c{c}\~{a}o normal padr\~{a}o}\\ \vspace{2ex}
{\large Walmes Zeviani -- LEG/UFPR}  \\
\end{center}

<<echo=false, results=hide>>=
#-----------------------------------------------------------------------------
dir.create("exemplos")
png(file="exemplos/qnorm%1d.png", width=500, height=250)
par(mar=c(4,4,1,1))
for(q in seq(0, 4,l=100)){
  curve(dnorm(x, 0, 1), -5, 5, ylab="f(z)", xlab="z")
  x <- seq(0, q, by=0.01)
  fx <- dnorm(x, 0, 1)
  polygon(c(x, rev(x)),
          c(fx, rep(0, length(fx))),
          col="gray90")
  abline(v=0, lty=2)
  Pr <- round(pnorm(q, 0, 1)-0.5, digits=3)
  qq <- round(q, digits=3)
  legend("topleft", bty="n", fill="gray90",
         legend=substitute(P(0<~Z<=~q)==Pr, list(q=qq, Pr=Pr)))
}
dev.off()
#-----------------------------------------------------------------------------
@ 

<<echo=false, results=hide>>=
#-----------------------------------------------------------------------------
require(xtable)
options(OutDec=",")
q <- seq(0,3.99,by=0.01)
p <- pnorm(q)-0.5
m <- matrix(p, byrow=TRUE, ncol=10)
rownames(m) <- gsub("\\.", ",", formatC(seq(0,3.9,0.1), dig=1, format="f"))
colnames(m) <- 0:9/100
#-----------------------------------------------------------------------------
@

\begin{center}
\animategraphics[controls, loop, width=0.75\textwidth]{10}{exemplos/qnorm}{1}{100}
\end{center}

\begin{center}
\small\addtolength{\tabcolsep}{-3pt}
{\footnotesize
<<echo=false, results=tex>>=
#-----------------------------------------------------------------------------
print(xtable(m, digits=5), floating=FALSE)
#-----------------------------------------------------------------------------
@ 
}
\end{center}
\end{document}

Tabelas com formatação condicional com Sweave

Tabela condicional gerada com Sweave.

Tabelas com formatação condicional permitem que você extraia a informação presente mais rápido. Com o Sweave, lógico, é possível apresentar tabelas com formatação. Basta que você faça uma função que formate adequadamente o valor das cédulas. No arquivo Sweave abaixo (salvar com extensão *.Rnw) eu preparo um exemplo reproduzível de como publicar as notas dos alunos. Com a cor azul serão as notas maiores ou iguais a sete, e cor vermelha nos casos contrários.

O grande truque é usar a opção sanitize.text.function=function(x){x} da função print.xtable() que aprendi com a ajuda do Marc Schwartz na R-help. Até a próxima ridícula.

\documentclass{article}
\usepackage{Sweave}
\usepackage{color}
\usepackage[brazil]{babel}

\title{Notas nas avalia\c{c}\~{o}es de Estat\'{i}stica Computacional}
\author{Walmes Zeviani}

\begin{document}
\maketitle

<<results=tex>>=
#-----------------------------------------------------------------------------
da <- data.frame(aluno=c("Carlos Adriano","Elizandra Pereira"
                   "Gustavo Flioz","Melissa Hultliertz",
                   "Rodrigo Allan","Vanessa Guith","Wilson Sandro"),
                 p1=10*rbeta(7,3,2), p2=10*rbeta(7,3,2))

colore <- function(x, corte=7){
  aux <- ifelse(x>=corte,
                paste("\\textcolor{blue}{", formatC(x, dig=2, format="f"), "}"),
                paste("\\textcolor{red}{", formatC(x, dig=2, format="f"), "}"))
  gsub("\\.", ",", aux)
}

da <- cbind(aluno=da$aluno, as.data.frame(apply(da[,-1], 2, colore)))

require(xtable)

caption <- "Notas nas avalia\\c{c}\\~oes."
print(xtable(da, caption=caption),
      sanitize.text.function=function(x){x},
      caption.placement="top", include.rownames=FALSE)
#-----------------------------------------------------------------------------
@ 

\end{document}
Categorias:sweave Tags:, , ,