super_banner_728x90

quinta-feira, 19 de julho de 2012

Plotando gráficos na web com rApache

Oi pessoal!

Hoje vou dar uma dica de como usar a linguagem R para criar uma aplicação web simples, com upload e um plot de um gráfico. Com essa aplicação, o usuário pode enviar um arquivo texto comum, selecionar o separador dos campos do arquivo, digitar os rótulos dos eixos e depois criar o gráfico, que é então mostrado na página.

Primeiramente, você deve instalar e configurar o rApache na sua máquina.




Agora, segue o nosso programa:
# simples_rApache.R
# script para criar gráficos simples usando rApache
# 19/07/2012
# Leandro Lima - @lelimat

setContentType("text/html")

cat('<html><head><title>Simple plot</title></head>\n')
cat('<body><H1>Simple plot</H1>\n')
cat('<form enctype=multipart/form-data method=POST action="">\n')

cat('Arquivo: <input type=file name=arquivo><br />\n')
cat('<select name=separador>\n')
cat('<option value=" ">Separador</option>\n')
cat('<option value=",">v&iacute;rgula (,)</option>\n')
cat('<option value=";">ponto-e-v&iacute;rgula (;)</option>\n')
cat('<option value=" ">espa&ccedil;o ( )</option>\n')
cat('</select><br />')
cat('Rotulo eixo x: <input type=text name=rotulo_eixo_x value="">')
cat('Rotulo eixo y: <input type=text name=rotulo_eixo_y value="">')
cat('<input type=submit name=Plotar>')
cat("<hr>\n")

# Verificando se algum arquivo foi enviado
if (!is.null(FILES)){

    separador <- POST$separador
    # Lendo o arquivo temporário criado durante o upload
    arquivo <- read.table(FILES$arquivo$tmp_name, sep=separador)

    # Rótulos dos eixos x e y
    rotulo_eixo_x <- try(as.character(POST$rotulo_eixo_x))
    rotulo_eixo_y <- try(as.character(POST$rotulo_eixo_y))

    # Criação do plot, na mesma pasta do script
    png("/var/www/tmp/plot.png")
    plot(arquivo, xlab=rotulo_eixo_x, ylab=rotulo_eixo_y)
    dev.off();

    # Mostrando imagem
    cat(paste("<img src=\"/tmp/plot.png\">\n",sep=''))

}

cat("</body></html>\n")
DONE


A página vai ser mostrada assim.


E esse é um exemplo de gráfico gerado para o
arquivo de entrada abaixo (separado por espaços).



































Arquivo plot.txt
1 1
2 4
3 9
4 16
5 25