Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
03_apostila:10-graficos02 [2020/08/12 06:04] 127.0.0.1 edição externa |
03_apostila:10-graficos02 [2023/08/25 17:18] (atual) |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
<WRAP tabs> | <WRAP tabs> | ||
- | * [[bie5782:02_tutoriais:tutorial5:start|Tutorial]] | + | * [[02_tutoriais:tutorial5:start|Tutorial]] |
- | * [[bie5782:01_curso_atual:exercicios5| Exercícios]] | + | * [[01_curso_atual:exercicios5| Exercícios]] |
- | * [[bie5782:03_apostila:05a-graficos| Apostila]] | + | * [[03_apostila:05a-graficos| Apostila]] |
- | * [[bie5782:03_apostila:10-graficos02| Apostila-Avançado]] | + | * [[03_apostila:10-graficos02| Apostila-Avançado]] |
</WRAP> | </WRAP> | ||
====== 5b. Gráficos Avançados ====== | ====== 5b. Gráficos Avançados ====== | ||
\\ | \\ | ||
- | Existem vários bibliotecas publicadas no repositório do R para auxiliá-los na construção de gráficos((veja o taskview [[http://cran.r-project.org/web/views/Graphics.html]] )). Esses pacotes usam um dos sistemas de maquinaria básica do R para a construção gráfica, os pacotes: //** graphics **// ou //**grid**//. Por exemplo, os pacotes //lattice// e //ggplot2// usam o sistema **//grid//**, enquanto o pacote //maps// o sistema **//graphics//**. Nesse capítulo utilizaremos apenas as funções básicas já instaladas e carregadas por padrão na sessão R, providas pelo sistema **//graphics//**, em outro capítulos abordaremos o sistema //**grid**//. | + | Existem várias bibliotecas publicadas no repositório do R para auxiliá-los na construção de gráficos((veja o taskview [[http://cran.r-project.org/web/views/Graphics.html]] )). Esses pacotes usam um dos sistemas de maquinaria básica do R para a construção gráfica, os pacotes: //** graphics **// ou //**grid**//. Por exemplo, os pacotes //lattice// e //ggplot2// usam o sistema **//grid//**, enquanto o pacote //maps// o sistema **//graphics//**. Nesse capítulo utilizaremos apenas as funções básicas já instaladas e carregadas por padrão na sessão R, providas pelo sistema **//graphics//**, em outro capítulos abordaremos o sistema //**grid**//. |
Nesse capítulo utilizaremos um exemplo para ilustrar um procedimento básico para a elaboração de gráficos mais complexos. | Nesse capítulo utilizaremos um exemplo para ilustrar um procedimento básico para a elaboração de gráficos mais complexos. | ||
Linha 15: | Linha 15: | ||
A parte mais importante e difícil da elaboração de uma boa representação gráfica está na sua concepção, que precede o procedimento que iremos descrever nesse capítulo. Partiremos da premissa que já foi decidido qual o melhor gráfico e como os elementos que o compõem estarão distribuídos e organizados. Uma boa dica é construir um esquema do gráfico a mão antes de iniciar o código para montá-lo no R. | A parte mais importante e difícil da elaboração de uma boa representação gráfica está na sua concepção, que precede o procedimento que iremos descrever nesse capítulo. Partiremos da premissa que já foi decidido qual o melhor gráfico e como os elementos que o compõem estarão distribuídos e organizados. Uma boa dica é construir um esquema do gráfico a mão antes de iniciar o código para montá-lo no R. | ||
- | No nosso caso, desenhamos, em um guardanapo de papel na mesa de um bar, um esboço do gráfico que iremos construir nesse capítulo. Os dados provem do resultado de uma metanálise que já havíamos explorados usando técnicas que apresentamos no capitulo de [[bie5782:03_apostila:05-exploratoria |Análise Exploratória de Dados]]. | + | No nosso caso, desenhamos, em um guardanapo de papel na mesa de um bar, um esboço do gráfico que iremos construir nesse capítulo. |
+ | |||
+ | /* | ||
+ | Os dados provém do resultado de uma meta-análise que já havíamos explorados usando técnicas que apresentamos no capítulo de [[03_apostila:05-exploratoria |Análise Exploratória de Dados]]. | ||
+ | */ | ||
<WRAP center round box 60%> | <WRAP center round box 60%> | ||
- | {{:bie5782:03_apostila:grapmeta01.png?400|}} | + | {{ :03_apostila:grapmeta01.png?400 |}} |
</WRAP> | </WRAP> | ||
- | O gráfico que esboçamos, apesar de aparentemente simples, apresenta desafios na sua construção e será utilizado para apresentar o procedimento padrão que utilizamos para a elaboração de gráficos mais avançado, baseado apenas nas funções básicas do R. | + | O gráfico que esboçamos, apesar de aparentemente simples, apresenta desafios na sua construção e será utilizado para apresentar o procedimento padrão que utilizamos para a elaboração de gráficos mais avançados, baseado apenas nas funções básicas do R. |
==== Layout ==== | ==== Layout ==== | ||
- | A primeira parte na construção do gráfico é definir seu layout. Aprendemos no capítulo introdutório de [[bie5782:03_apostila:05a-graficos|gráficos]] que podemos dividir a janela gráfica modificando os parâmetros //mfrow// ou //mfcol// do dispositivo gráfico, através da função ''par()''. Uma forma mais versátil e flexível de dividir a janela gráfica é utilizar a função ''layout()''. O primeiro argumento dessa função é uma //matrix// com o número de linhas e colunas correspondente às divisões do dispositivo. Os valores nessa matrix correspondem à ordem que cada área do dispositivo será plotada. | + | A primeira parte na construção do gráfico é definir seu layout. Aprendemos no capítulo introdutório de [[03_apostila:05a-graficos|gráficos]] que podemos dividir a janela gráfica modificando os parâmetros //mfrow// ou //mfcol// do dispositivo gráfico, através da função ''par()''. Uma forma mais versátil e flexível de dividir a janela gráfica é utilizar a função ''layout()''. O primeiro argumento dessa função é uma matriz com o número de linhas e colunas correspondente às divisões do dispositivo. Os valores nessa matriz correspondem à ordem que cada área do dispositivo será plotada. |
Veja um exemplo dividindo o dispositivo gráfico em nove áreas: | Veja um exemplo dividindo o dispositivo gráfico em nove áreas: | ||
- | <code> | + | <code rsplus> |
mtplot <- matrix(1:9, ncol=3, nrow=3, byrow=TRUE) | mtplot <- matrix(1:9, ncol=3, nrow=3, byrow=TRUE) | ||
layout(mtplot) | layout(mtplot) | ||
Linha 35: | Linha 39: | ||
Além disso, é possível controlar a proporção que cada linha e coluna terá no layout final utilizando os argumentos ''widths'' e ''heights''. | Além disso, é possível controlar a proporção que cada linha e coluna terá no layout final utilizando os argumentos ''widths'' e ''heights''. | ||
- | <code> | + | <code rsplus> |
mtplot <- matrix(1:9, ncol=3, nrow=3, byrow=TRUE) | mtplot <- matrix(1:9, ncol=3, nrow=3, byrow=TRUE) | ||
layout(mtplot, widths=c(0.1, 0.6, 0.4), heights=c(1,4,1)) | layout(mtplot, widths=c(0.1, 0.6, 0.4), heights=c(1,4,1)) | ||
Linha 41: | Linha 45: | ||
</code> | </code> | ||
- | Note que os valores referentes ao tamanho das colunas ou linhas não necessita somar um, significam apenas a proporção relativa. | + | Note que os valores referentes ao tamanho das colunas ou linhas não necessita somar um; eles significam apenas uma proporção relativa. |
<WRAP center round box red 60%> | <WRAP center round box red 60%> | ||
Linha 53: | Linha 57: | ||
O nosso gráfico tem um layout bem simples. Uma região principal onde vamos fazer o gráfico propriamente dito e uma coluna mais estreita onde vamos colocar a legenda da borda direita ("life stage" e "geographic region") e as linhas associadas. | O nosso gráfico tem um layout bem simples. Uma região principal onde vamos fazer o gráfico propriamente dito e uma coluna mais estreita onde vamos colocar a legenda da borda direita ("life stage" e "geographic region") e as linhas associadas. | ||
- | <code> | + | <code rsplus> |
layout (matrix(c(1,2),ncol=2, nrow=1), width=c(8,2)) | layout (matrix(c(1,2),ncol=2, nrow=1), width=c(8,2)) | ||
layout.show(2) | layout.show(2) | ||
Linha 59: | Linha 63: | ||
==== Região Principal ==== | ==== Região Principal ==== | ||
- | Antes de plotar algo na primeira área do gráfico, vamos primeira ajustar as bordas usando a função ''par()'' e seu argumento ''mar''. Em seguida iniciamos o gráfico sem nenhum valor, apenas definindo as coordenadas do região gráfica. Lembre-se, queremos colocar cada elemento do gráfico separadamente e ter controle total sobre o que será desenhado. Os valores do eixo //x// correspondem ao intervalo dos dados e do eixo //y// foi definido pelo número de elementos que serão desenhados e o espaçamento entre eles. Nesse último caso a escala é arbitrária. Para definir tanto o espaçamento das bordas quanto a escala de //y// utilizamos um processo iterativo de ajuste, plotando o gráfico e reajustando os valores. | + | Antes de plotar algo na primeira área do gráfico, vamos primeiro ajustar as bordas usando a função ''par()'' e seu argumento ''mar''. Em seguida iniciamos o gráfico sem nenhum valor, apenas definindo as coordenadas da região gráfica. Lembre-se, queremos colocar cada elemento do gráfico separadamente e ter controle total sobre o que será desenhado. Os valores do eixo //x// correspondem ao intervalo dos dados e do eixo //y// foi definido pelo número de elementos que serão desenhados e o espaçamento entre eles. Nesse último caso a escala é arbitrária. Para definir tanto o espaçamento das bordas quanto a escala de //y// utilizamos um processo iterativo de ajuste, plotando o gráfico e reajustando os valores. |
- | <code> | + | <code rsplus> |
- | par(mar=c(5,4,4,3.5)) | + | par(mar=c(5,1,4,5)) |
plot(x=NULL,y=NULL, xlim=c(-1.5,2.5), ylim=c(0.5,7.5), | plot(x=NULL,y=NULL, xlim=c(-1.5,2.5), ylim=c(0.5,7.5), | ||
type="n", yaxt="n", xlab="Effect Size (lnOR)", | type="n", yaxt="n", xlab="Effect Size (lnOR)", | ||
Linha 70: | Linha 74: | ||
Agora vamos colocar as legendas e os eixos do lado direito do gráficos usando a função ''axis()'' e as linhas vertical e horizontais utilizando a função ''abline()'': | Agora vamos colocar as legendas e os eixos do lado direito do gráficos usando a função ''axis()'' e as linhas vertical e horizontais utilizando a função ''abline()'': | ||
- | <code> | + | <code rsplus> |
axis(side=4, at=c(1,2,4,5,7), labels=c("adult (2)", "young (28)", | axis(side=4, at=c(1,2,4,5,7), labels=c("adult (2)", "young (28)", | ||
"temperate (28)", "tropical (2)", "overall (30)"), | "temperate (28)", "tropical (2)", "overall (30)"), | ||
Linha 78: | Linha 82: | ||
</code> | </code> | ||
- | Agora vamos colocar os pontos e as barras referentes aos valores médios e intervalo de confiança usando a função ''points()'' e os símbolos ''pch=19'' (circulo preenchido) e ''pch="_"'' para a barra ((veja o help e o exemplo da função points para os códigos dos símbolos)). Em seguida desenhamos as linhas usando a função ''segments()'' que tem como argumento as coordenadas do inicio (//x0// e //y0//) e do final da linha (//x1// e //y1//). Note que poderíamos desenhar isoladamente cada ponto e cada segmento, mas fazemos todos juntos concatenando as coordenadas em vetores em que as posições são equivalentes. | + | Agora vamos colocar os pontos e as barras referentes aos valores médios e intervalo de confiança usando a função ''points()'' e os símbolos ''pch=19'' (circulo preenchido) e ''pch="_"'' para a barra ((veja o help e o exemplo da função points para os códigos dos símbolos)). Em seguida desenhamos as linhas usando a função ''segments()'' que tem como argumento as coordenadas do início (//x0// e //y0//) e do final da linha (//x1// e //y1//). Note que poderíamos desenhar isoladamente cada ponto e cada segmento, mas fazemos todos juntos concatenando as coordenadas em vetores em que as posições são equivalentes. |
- | <code> | + | <code rsplus> |
points (x=c(-0.577, 0.87, 0.01, 1.06,0.457), | points (x=c(-0.577, 0.87, 0.01, 1.06,0.457), | ||
y=c(1,2, 4, 5, 7), pch=19 ) #medias | y=c(1,2, 4, 5, 7), pch=19 ) #medias | ||
Linha 92: | Linha 96: | ||
<WRAP center round box 100%> | <WRAP center round box 100%> | ||
//**__Desenhando os pontos e barras no gráfico__**// | //**__Desenhando os pontos e barras no gráfico__**// | ||
- | {{:bie5782:03_apostila:meta01.png?300 |}} | + | {{:03_apostila:meta01.png?300 |}} |
- | {{ :bie5782:03_apostila:meta02.png?300|}} | + | {{ :03_apostila:meta02.png?300|}} |
</WRAP> | </WRAP> | ||
Linha 99: | Linha 103: | ||
==== Segunda região gráfica ==== | ==== Segunda região gráfica ==== | ||
- | Vamos inciar a segunda região gráfica da mesma maneira que a primeira, ajustando as margens e definindo as coordenadas cartesianas da região que nesse caso são totalmente arbitrárias, mas devem ter correspondência com o eixo //y// da primeira área gráfica. Note os argumentos do ''plot()'' nesse caso são necessários para que nada seja desenhado na região, e estamos apenas definindo a escala das coordenadas //x// e //y//. | + | Vamos iniciar a segunda região gráfica da mesma maneira que a primeira, ajustando as margens e definindo as coordenadas cartesianas da região que nesse caso são totalmente arbitrárias, mas devem ter correspondência com o eixo //y// da primeira área gráfica. Note os argumentos do ''plot()'' nesse caso são necessários para que nada seja desenhado na região, e estamos apenas definindo a escala das coordenadas //x// e //y//. |
- | <code> | + | <code rsplus> |
- | par (mar=c(5,4,4,2.9)) | + | par (mar=c(5,2,4,2.9)) |
plot(x=NULL,y=NULL, xlim=c(0,2), ylim=c(0.5,7.5),type="n", | plot(x=NULL,y=NULL, xlim=c(0,2), ylim=c(0.5,7.5),type="n", | ||
xaxt="n", yaxt="n",xlab="", ylab="", bty="n") | xaxt="n", yaxt="n",xlab="", ylab="", bty="n") | ||
Linha 115: | Linha 119: | ||
Agora só precisamos colocar os segmentos e as legendas para finalizar o nosso gráfico: | Agora só precisamos colocar os segmentos e as legendas para finalizar o nosso gráfico: | ||
- | <code> | + | <code rsplus> |
points(x=rep(c(0.5),4), y=c(0.4, 2.6, 3.4, 5.6), pch="-") | points(x=rep(c(0.5),4), y=c(0.4, 2.6, 3.4, 5.6), pch="-") | ||
segments(x0=c(0.5, 0.5), y0=c(0.4, 3.4), x1=c(0.5,0.5), y1=c(2.6, 5.6)) | segments(x0=c(0.5, 0.5), y0=c(0.4, 3.4), x1=c(0.5,0.5), y1=c(2.6, 5.6)) | ||
axis(side=4, at=1.5, labels= "Target life stage", lwd.ticks=0) | axis(side=4, at=1.5, labels= "Target life stage", lwd.ticks=0) | ||
- | axis(side=4, at=4.5, labels= "Geographic region", lwd.ticks=0) | + | axis(side=4, at=4.75, labels= "Geographic region", lwd.ticks=0) |
</code> | </code> | ||
Linha 125: | Linha 129: | ||
<WRAP center round box 80%> | <WRAP center round box 80%> | ||
- | {{ :bie5782:03_apostila:metagraf.png?500 |}} | + | {{ :03_apostila:metagraf.png?500 |}} |
</WRAP> | </WRAP> | ||
==== Salvando o Gráfico ==== | ==== Salvando o Gráfico ==== | ||
- | Explicamos os procedimentos gerais para salvar gráfico no capítulo anterior, no tópico [[bie5782:03_apostila:05a-graficos#Salvando Gráficos|Salvando Gráficos]]. Vamos recordar alguns pontos importantes. | + | Explicamos os procedimentos gerais para salvar gráfico no capítulo anterior, no tópico [[03_apostila:05a-graficos#Salvando Gráficos|Salvando Gráficos]]. Vamos recordar alguns pontos importantes. |
O nosso gráfico foi construído no dispositivo de tela e pode ser salvo na resolução padrão com a função ''savePlot()'' que permite salvar em formatos //jpg//, //png//, //tiff// e //bmp//. Veja o help da função para mais informações. | O nosso gráfico foi construído no dispositivo de tela e pode ser salvo na resolução padrão com a função ''savePlot()'' que permite salvar em formatos //jpg//, //png//, //tiff// e //bmp//. Veja o help da função para mais informações. | ||
Para salvar uma cópia com resolução e tamanho definidos pelo usuário é necessário usar o dispositivo de arquivo. O R tem vários dispositivos de arquivos que são abertos com as funções com o nome do formato do arquivo: ''bmp()'', ''jpeg()'', ''png()'' e ''tiff()''. | Para salvar uma cópia com resolução e tamanho definidos pelo usuário é necessário usar o dispositivo de arquivo. O R tem vários dispositivos de arquivos que são abertos com as funções com o nome do formato do arquivo: ''bmp()'', ''jpeg()'', ''png()'' e ''tiff()''. | ||
Linha 137: | Linha 141: | ||
* abra o dispositivo usando a função correspondente, nomeando o arquivo que será construído e definindo os parâmetros de tamanho da imagem e unidade a ser utilizada. Por exemplo: ''width = 480, height = 480, units = "px"'' | * abra o dispositivo usando a função correspondente, nomeando o arquivo que será construído e definindo os parâmetros de tamanho da imagem e unidade a ser utilizada. Por exemplo: ''width = 480, height = 480, units = "px"'' | ||
* faça o gráfico utilizando o código construído anteriormente no dispositivo de janela. Note que não irá aparecer o gráfico pois ele está sendo montado diretamente no arquivo nomeado | * faça o gráfico utilizando o código construído anteriormente no dispositivo de janela. Note que não irá aparecer o gráfico pois ele está sendo montado diretamente no arquivo nomeado | ||
- | * ao finalizar o gráfico, feche o dispositivo gráfico que abriu utilizando a função ''dev.off()''. Nesse momento o arquivo e fechado e gravado no seu diretório de trabalho ''getwd()''. | + | * ao finalizar o gráfico, feche o dispositivo gráfico que abriu utilizando a função ''dev.off()''. Nesse momento o arquivo é fechado e gravado no seu diretório de trabalho ''getwd()''. |
Veja exemplo abaixo para a construção de um arquivo //png// com fundo transparente: | Veja exemplo abaixo para a construção de um arquivo //png// com fundo transparente: | ||
- | <code> | + | <code rsplus> |
png(filename = "metaPlot.png", | png(filename = "metaPlot.png", | ||
width = 900, height = 900, units = "px", pointsize = 12, | width = 900, height = 900, units = "px", pointsize = 12, | ||
bg = "transparent") | bg = "transparent") | ||
| | ||
- | ...# inicio do código do gráfico | + | ...# início do código do gráfico |
... | ... | ||
...# fim do código do gráfico | ...# fim do código do gráfico |