* [[bie5782:02_tutoriais:tutorial5:start|Tutorial]] * [[bie5782:02_tutoriais:tutorial5b:start|Tutorial II]] * [[bie5782:01_curso_atual:exercicios5| Exercícios]] * [[bie5782:03_apostila:05a-graficos| Apostila]] ====== 5. Tutoriais para Criação e Edição de Gráficos no R====== ===== Orientações Gerais===== Aqui são apenas dados os códigos e funções, para você executar e entender como funcionam. Para entender as funções, leia antes o capítulo correspondente na [[bie5782:03_apostila:05a-graficos|apostila]]. Experimente também mudar mais argumentos e funções além das apresentadas nos exercícios. =====Criando Gráficos===== Há duas maneiras de se especificar as variáveis em gráficos: * Cartesiana: plot(x,y) * Fórmula estatística: plot(y~x) Experimente as duas para criar alguns gráficos simples: riqueza <- c(15,18,22,24,25,30,31,34,37,39,41,45) area <- c(2,4.5,6,10,30,34,50,56,60,77.5,80,85) area.cate <- rep(c("pequeno", "grande"), each=6) plot(riqueza~area) plot(area,riqueza) # o mesmo que o anterior boxplot(riqueza~area.cate) =====Editando Gráficos===== ==== Parâmetros Globais e locais ==== Experimente o comando ''par'' para modificar alguns parâmetros gráficos. Por exemplo, coloque as legendas dos eixos na vertical com: par(las=1) plot(riqueza~area) Para aumentar o tamanho dos elementos do gráfico, modifique o parâmetro ''cex'': par(cex=2) plot(riqueza~area) Em ambos casos, os parâmetro gráficos foram modificados no dispositivo gráfico aberto, ou seja, ficaram retidos como padrão até a modificação do ''par'' ou fechamento do dispositivo. boxplot(riqueza~area.cate) O fechamento dos dispositivos pode ser feito de várias maneiras, fechando a janela gráfica com o mouse, fechando o dispositivo com a função '' dev.off()'' ou fechando todos os dispositivos abertos com a função '' graphics.off() ''. Abaixo, fechamos todos os dispositivos e refazemos o gráfico com o padrão básico do R. graphics.off() plot(riqueza~area) Alguns parâmetros gráficos só podem ser modificados através dos parâmetros do dispositivo usando o '' par() '', outros, podem ser modificados também nas funções de alto nível, aquelas que abrem o dispositivo e iniciam o gráfico como '' plot(), hist(), boxplot(), image() '' plot(riqueza~area, cex = 2, las = 1) Note que pode haver diferenças entre modificar os parâmetros gráficos globalmente ou na função de alto nível. Nesse caso, o '' cex '' só modificou o tamanho do símbolo, enquanto nos parâmetros globais modificou todos os elementos do gráfico (legenda, eixos, títulos, ...). Nesse último caso, o dispositivo não leva para o próximo gráfico os parâmetros modificados. boxplot(riqueza~area.cate) Alguns outros parâmetros funcionam com alguns funções de alto nível e não com outras. Portanto, deve estar atento para quais parâmetros pode ser modificados localmente, veja o exemplo abaixo: plot(riqueza~area) plot(riqueza~area, bty="l", tcl=0.3) Percebeu o que mudou? Agora tente: boxplot(riqueza~area.cate, bty="l", tcl=0.3) O que aconteceu? E agora? par(bty="l") par(tcl=0.3) boxplot(riqueza~area.cate) =====Gráficos Multiplos e Margens===== O parâmetro ''mfrow'' permite que o dispositivo gráfico seja repartido em painéis que recebem diferentes gráficos. Esse é um exemplo de parâmetro que só pode ser modificado pela função ''par()''. Por exemplo, para colocar dois gráficos em um mesmo dispositivo de tela, usamos: par(mfrow=c(2,1)) plot(riqueza~area) boxplot(riqueza~area.cate) par(mfrow=c(1,2)) plot(riqueza~area) boxplot(riqueza~area.cate) Que pode ser combinado com ''mar'' para mudar o tamanho das margens também: par(mfrow=c(2,1), mar=c(4,14,2,6)) plot(riqueza~area) boxplot(riqueza~area.cate) par(mfrow=c(1,2)) par(mar=c(14,4,8,2)) plot(riqueza~area) boxplot(riqueza~area.cate) par(mfrow=c(1,2)) par(mar=c(8,4,8,1)) plot(riqueza~area) par(mar=c(14,2,4,0.5)) boxplot(riqueza~area.cate) =====Inserindo mais Informações em Gráficos===== Dentre as várias funções existentes para se inserir informações em gráficos, existem sete que são bastante úteis. Usando as variáveis: riqueza <- c(15,18,22,24,25,30,31,34,37,39,41,45) area <- c(2,4.5,6,10,30,34,50,56,60,77.5,80,85) abundancia <- rev(riqueza) Crie gráficos inserindo os parâmetros abaixo. ==== lines() ==== Para inserir linhas retas ou curvas não-paramétricas (como ''lowess'', ''loess'', ''gam'', etc). plot(riqueza~area) lines(lowess(area, riqueza)) Um exemplo já conhecido: sobrepondo uma curva de densidade probabilística empírica a um histograma: ##Duracao em minutos das erupções do Faithful Geiser, Yellowstone ## Objeto faithful do pacote datasets hist(faithful$eruptions,prob=TRUE) lines(density(faithful$eruptions),col="blue") ==== abline() ==== Insira uma linha com intercepto e inclinação dados por números com ##100 numeros de uma distribuicao uniforme entre 1 e 10 x <- runif(100, 1, 10) ## Os mesmos numeros somados a um ruído normal de media zero ## e desvio-padrao um: y <- x+rnorm(100) ##Scatterplot e linha teorica esperada plot(y~x) abline(0,1, col="blue") Agora veja o que acontece se o argumento da função ''abline'' é o objeto resultante do ajuste de uma regressão linear simples, obtido com a função ''lm''((detalhes na unidade sobre [[bie5782:03_apostila:06-modelos|modelos lineares]])): modelo <- lm(riqueza~area) plot(riqueza~area) abline(modelo) E há ainda os argumentos ''h'' e ''v'' para linhas horizontais e verticais. Aqui traçamos as linhas que passam pelas médias de cada variável em um gráfico de dispersão. plot(riqueza~area) abline(v=mean(area)) abline(h=mean(riqueza)) **Você sabia?** A reta da regressão linear simples sempre passa pelo ponto que é a interseção destas duas linhas. ==== text() ==== Use esta função para inserir texto dentro do gráfico. O texto pode ser uma letra, um símbolo (muito usado para mostrar diferenciar classes no gráfico), uma palavra ou até mesmo uma frase: plot(riqueza~area) text(x=20,y=40,"texto") Você pode usar esta função para identificar identificar pontos em seu gráfico, ou plotar rótulos ao invés de pontos: require(MASS)# para objeto Animals head(Animals)# consulte o help para entender plot(brain~body, data=Animals, log="xy", type="n") text(y=Animals$brain,x=Animals$body,labels=rownames(Animals)) ==== mtext() ==== Esta função acrescenta texto nas margens do gráfico ou da janela gráfica. Consulte a página de ajuda para entender seus argumentos plot(riqueza~area) mtext("legenda no lado errado", side=4, line=0.9, at=20,cex=2, family="serif") ==== par(new=TRUE) ==== Comando para sobrepor um novo gráfico a um gráfico já existente. Execute-o e compare com o obtido com o comando ''par(mfrow=c(2,2))'' plot(riqueza~area) par(new=TRUE) plot(abundancia~area) ==== axis() ==== Para se inserir um eixo novo. Esta função é bastante usada nos casos em que se deseja ter dois gráfico dentro de uma mesma figura (ver ''par(new=TRUE)''), ou então se deseja controlar muitos dos parâmetros dos eixos (como em ''mtext()''). plot(riqueza~area) par(new=TRUE) plot(abundancia~area, axes=FALSE, ann=FALSE) ## começa com gráfico sem eixos axis(4) ## adiciona eixo ==== arrows(), rect(), polygon() ==== Descubra o efeito destas funções, por exemplo: plot(riqueza~area) rect(20,20,40,40) =====Salvando Gráficos===== Abra um dispositivo //jpg// para armazenar um gráfico, com a função ''jpeg'', execute os comandos para criar o gráfico e fecehe o dispositivo: jpeg(filename = "Rplotaula.jpg", width = 480, height = 480, units = "px", pointsize = 12, quality = 100, bg = "white", res = NA) par(mfrow=c(1,2)) par(mar=c(14,4,8,2)) plot(riqueza~area) boxplot(riqueza~area.cate) dev.off() ## fecha o dispositivo jpg Verifique em seu diretório de trabalho se há agora uma figura //jpg// com o nome "Rplotaula.jpg". Agora abra um dispositivo gráfico cria arquivos com numeração sequencial, envie para ele dois gráficos e feche o dispositivo: png("meugrafico%02d.png") plot(riqueza~area) boxplot(riqueza~area.cate) dev.off() Qual a diferença no resultado deste comando e do anterior? ===== Manipulação de dispositivos gráficos===== Feche toda as janelas de gráficos do R e execute um comando ''plot'', o que irá abrir um [[bie5782:03_apostila:05a-graficos#dispositivos_graficos|dispositivo gráfico de tela]]: plot(riqueza~area) Agora abra um novo dispositivo gráfico de tela: > x11() Uma nova janela gráfica em branco se abrirá, na margem superior da qual você verá a indicação de que agora este é o dispositivo ativo, //e.g.//: {{:bie5782:03_apostila:janelas_graficas_ruindous.png?500|Duas janelas gráficas abertas no R em Windows}} Verifique que agora o dispositivo ativo é o de número 3, e ative o dispositivo 2: dev.cur() dev.set(which=2) Agora um dispositivo gráfico png e outro pdf: png("figura%02d.png") pdf("figura%02d.pdf") Quantos dispositivos estão abertos? Obtenha a lista com dev.list() Mas apenas umestá ativo, isto é, recebe a saída dos comandos gráficos. Descubra qual é com dev.cur() E altere para o dispositivo 3 com dev.set(3) dev.cur() #verificando Agora experimente fechar dispositivos com o comando ''dev.off'': dev.list() dev.cur() dev.off() # quem foi fechado? dev.list() # verificando dev.cur() # e quem é o ativo agora? ===== Próximos passos ===== Para mais informações sobre a edição de gráficos siga para a [[bie5782:03_apostila:05a-graficos]]. Nesse wiki focamos no uso das ferramentas básicas do R e nesse tutorial no pacote ''graphics'' carregado por padrão na sessão do R. O pacote para elaboração de gráficos chamado ''ggplot2'' vem se tornando muito popular nos últimos anos, mas apresenta uma sintaxe muito diferente da usual no R. Por essa razão preferimos deixá-lo de fora do nosso material. Existem muitos bons tutoriais sobre o ''ggplot2'', inclusive um ótimo feito pelo colaborador da disciplina Gustavo Burin Ferreira, caso tenha interesse acesse: * [[https://blog.gburin.com/tutorial-de-ggplot2|]]