gráficos no r - portal ufersa · para modificar o modo de como o gráfico é apresentado, podemos...

32
Universidade Federal Rural do Semi-Árido Gráficos no R Projeto R Grupo de Pesquisa em Matemática Aplicada 1 Mário Jorge Rafael Ferreira

Upload: others

Post on 19-Jan-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Universidade Federal Rural do Semi-Árido

Gráficos no R

Projeto RGrupo de Pesquisa em Matemática Aplicada

1

Mário JorgeRafael Ferreira

O R é uma poderosa ferramenta no que diz respeito a confecção degráficos e afins. Na estatística, em especial, ele possibilita a criação dehistogramas, ogivas, curvas de distribuição, regressão, dentre outros.

Dentro da estatística as ferramentas gráficas nos ajudam a fazer umestudo inicial dos nossos dados, facilitando o entendimento de umproblema, pois podemos usualmente identificar as variáveis envolvidas nonosso estudo.

Gráficos 2D

nosso estudo.

Projeto RUniversidade Federal Rural do Semi-

Árido2

No R temos diversas funções geradoras de gráficos, sendo elas classificadas como:

• Funções Gráficas de Alto Nível: Criam novos gráficos na janela definindo eixos, título, etc.

Por exemplo: plot, hist, image, contour, persp, etc.

• Funções Gráficas de Baixo Nível: Permitem adicionar novas informações a • Funções Gráficas de Baixo Nível: Permitem adicionar novas informações a gráficos já criados, como novos dados, linhas, etc.

Por exemplo: points, lines, abline, polygon, legend, etc.

• Funções Gráficas Iterativas: Permitem retirar ou adicionar informações aos gráficos já existentes, usando por exemplo o mouse.

Por exemplo: locator e identify

Projeto RUniversidade Federal Rural do Semi-

Árido3

plot( )

O comando plot( ) é uma função genérica para plotagem de objetos no R. Ele inicia um novo gráfico recebendo os valores de x e y.

plot(x,y)

Projeto RUniversidade Federal Rural do Semi-

Árido4

Para modificar o modo de como o gráfico é apresentado, podemos alterar alguns parâmetros no comando que chama o gráfico, por exemplo:

• Para alterar o padrão dos pontos, adicionamos a linha do comando type = “ ”

1. "p" para pontos( points),

2. "l“ para linha (lines),

3. "b" para ambos (both),

Projeto RUniversidade Federal Rural do Semi-

Árido5

3. "b" para ambos (both),

4. "c" para tracejado,

5. "o“ para plotar todos sobrepostos (‘overplotted’),

6. "h“ para linhas verticais(semelhante a um historiograma),

7. "s“ para a curva ser apresentada em degrais (steps),

8. "S“ para a curva ser apresentada em degrais (steps),

9. "n" para que nenhuma curva seja plotada (no plotting).

Alterando Padrões dos Pontos

Podemos optar por diferentes padrões de pontos, usando o argumento pch=.

Por exemplo:

• plot(x,y,pch=) para utilizar algum símbolo.

• plot(x,y,pch=0) para utilizar algum símbolo ja existente, indo do 0 ao 14.

• plot(x,y,pch=“*”) para utilizar * como padrão dos pontos, devemos utilizar as aspas, assim como qualquer outro caracter que convenha ser utilizado.

Projeto RUniversidade Federal Rural do Semi-

Árido6

Alterando as linhas

A largura das linhas pode ser alterada com o argumento lwd=(dica: tente decorar as letras pela palavra line width, que signica largura de linha), enquanto os estilos das linhas podem ser modicados com o argumento lty=(dica: tente decorar as letras pela palavra line type, que signica tipo de linha), veja o exemplo abaixo:

plot(x,y)

lines(x,y,lwd=2)

lines(rev(x),y,lty=2)

Projeto RUniversidade Federal Rural do Semi-

Árido7

Definindo o Intervalo dos Eixos

Criamos um gráfico determinando inicialmente o intervalo em cada eixoatravés do argumento type= n , criando assim, um gráfico em branco,somente com margens e eixos ajustados. Podemos adicionar linhas e pontoscom os comandos já vistos por nós.

Por exemplo:Por exemplo:

plot(c(0,20),c(-800,800),type='n')

lines(x,y)

lines(x,y)

Projeto RUniversidade Federal Rural do Semi-

Árido8

Adicionando Texto

Para adicionarmos textos utilizamos duas funções: title( ) e text( ).

• Como e sugerido pelo nome do comando, title( ) e utilizado para a criação de títulos para os gráficos e text( ) é utilizado para adicionar um texto em qualquer lugar do gráfico.

Projeto RUniversidade Federal Rural do Semi-

Árido9

Gráficos Múltiplos

Podemos plotar até 6 gráficos numa mesma janela com a função par( ), nela definimos como os gráficos devem se distribuir na janela, sendo definido como uma matriz(nessa analogia a matriz máxima que pode ser fornecida é uma 3x2).

Por exemplo:

par(mfrow=c(2,2)), para ficar duas colunas e duas linhas, comportando, assim, de uma a quatro janelas.assim, de uma a quatro janelas.

A função par( ) tem diversas outras funcionalidades no que diz respeito a confecção de gráficos, as quais veremos mais adiante. A título de informação, podemos também fazer gráficos múltiplos com a função layout( ).

Projeto RUniversidade Federal Rural do Semi-

Árido10

contour( )

• Cria um gráfico de contorno, ou adiciona linhas de contorno a um gráfico já existente;

• Utiliza os parâmetros x,y e z, sendo que z deve ser fornecido em forma de matriz com os valores de x e y.

Projeto RUniversidade Federal Rural do Semi-

Árido11

Mapa Topográfico do Vulcão Maunga Whau

rx <- range(x <- 10*1:nrow(volcano))

ry <- range(y <- 10*1:ncol(volcano))

ry <- ry + c(-1,1) * (diff(rx) - diff(ry))/2

tcol <- terrain.colors(12)

par(opar); opar <- par(pty = "s", bg = "lightcyan")

plot(x = 0, y = 0,type = "n", xlim = rx, ylim = ry, xlab = "", ylab = "")

u <- par("usr")

rect(u[1], u[3], u[2], u[4], col = tcol[8], border = "red")

contour(x, y, volcano, col = tcol[2], lty = "solid", add = TRUE, vfont = c("sans serif", "plain"))

title("A Topographic Map of Maunga Whau", font = 4)

abline(h = 200*0:4, v = 200*0:4, col = "lightgray", lty = 2, lwd = 0.1)

Projeto RUniversidade Federal Rural do Semi-

Árido12

Projeto RUniversidade Federal Rural do Semi-

Árido13

image( )

• Cria uma grade de retângulos coloridos em uma escala de cinza, correspondendo ao valor em z. Pode ser usado para mostrar imagens tridimensionais ou espaciais.

• As funções heat.colors, terrain.colors e topo.colors criam um espectro de cores (vermelho ao branco) e um esquema arranjado para dispor de forma ordenada os dados, dando cores ao invés de números. ordenada os dados, dando cores ao invés de números.

Projeto RUniversidade Federal Rural do Semi-

Árido14

# Volcano data visualized as matrix. Need to transpose and flip

# matrix horizontally.

image(t(volcano)[ncol(volcano):1,])

Projeto RUniversidade Federal Rural do Semi-

Árido15

# UMA MELHOR FORMA DE APRESENTAR VULCANO

x <- 10*(1:nrow(volcano))

y <- 10*(1:ncol(volcano))

image(x, y, volcano, col = terrain.colors(100), axes = FALSE)

contour(x, y, volcano, levels = seq(90, 200, by = 5), add = TRUE, col = "peru")

axis(1, at = seq(100, 800, by = 100))

axis(2, at = seq(100, 600, by = 100)) axis(2, at = seq(100, 600, by = 100))

box()

title(main = "Maunga Whau Volcano", font.main = 4)

Projeto RUniversidade Federal Rural do Semi-

Árido16

Projeto RUniversidade Federal Rural do Semi-

Árido17

Gráficos 3D

• O R apresenta diversas ferramentas para gerar superfícies e curvas no espaço, porém a maioria delas devem ser chamadas através dos packages.

Projeto RUniversidade Federal Rural do Semi-

Árido18

•Plota superfícies sobre o plano xy, em perspectiva;

•Interpreta os valores de z como uma matriz que fornece, assim como uma tabela de f(x[ i ],y[ i ]), sendo o eixo x corresponde a linha e o eixo y a coluna.

persp( )

o eixo x corresponde a linha e o eixo y a coluna.

Exemplo:

x <- seq(-10, 10, length = 50) y <- x rotsinc <- function(x,y){

sinc <- function(x) { y <- sin(x)/x ; y[is.na(y)] <- 1; y } 10 * sinc( sqrt(x^2+y^2) )

} sinc.exp <- expression(z == Sinc(sqrt(x^2 + y^2)))

z <- outer(x, y, rotsinc) par(bg = "white",mfrow=c(1,2),mar=rep(1.5,4)) persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue") title(sub=".")## work around persp+plotmath bugtitle(main = sinc.exp)

persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue", ltheta = 120, shade = 0.75, ticktype = "detailed", xlab = "X", ylab = "Y", zlab = "Z")

title(sub=".")## work around persp+plotmath bugtitle(main = sinc.exp)

Projeto RUniversidade Federal Rural do Semi-

Árido20

Projeto RUniversidade Federal Rural do Semi-

Árido21

Exemplo:

z <- 2 * volcano # Exaggerate the relief

x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)

y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

par(mar=rep(.5,4))

persp(x, y, z, theta = 120, phi = 15, scale = FALSE, axes = FALSE)

Volcano – Gráfico de um vulcão

Projeto RUniversidade Federal Rural do Semi-

Árido23

Aprimorando o Exemplo

z <- 2 * volcano # Exaggerate the relief x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N) y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

z0 <- min(z) - 20

The Maunga Whau Volcano. Vamos agora aprimorar nossa superfície, tornandoa mais agradável visualmente. Vamos utilizar verde na superfície(green3), o fundo de azul claro (lightblue) e os lados em cinza(gray).

z0 <- min(z) - 20 z <- rbind(z0, cbind(z0, z, z0), z0) x <- c(min(x) - 1e-10, x, max(x) + 1e-10) y <- c(min(y) - 1e-10, y, max(y) + 1e-10)

fill <- matrix("green3", nr = nrow(z)-1, nc = ncol(z)-1) fill[ , i2 <- c(1,ncol(fill))] <- "gray" fill[i1 <- c(1,nrow(fill)) , ] <- "gray"

par(bg = "lightblue",mar=c(.5,.5,2.5,.5)) persp(x, y, z, theta = 120, phi = 15, col = fill, scale = FALSE, axes = FALSE) title(main = "Maunga Whau\nOne of 50 Volcanoes in the Auckland Region.",font.main = 4)

Projeto RUniversidade Federal Rural do Semi-

Árido24

Projeto RUniversidade Federal Rural do Semi-

Árido25

z <- 2 * volcano # Exaggerate the reliefx <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

z0 <- min(z) - 20z <- rbind(z0, cbind(z0, z, z0), z0)x <- c(min(x) - 1e-10, x, max(x) + 1e-10)y <- c(min(y) - 1e-10, y, max(y) + 1e-10)

Para visualização em perspectiva:

y <- c(min(y) - 1e-10, y, max(y) + 1e-10)

fill <- matrix("green3", nr = nrow(z)-1, nc = ncol(z)-1)fill[ , i2 <- c(1,ncol(fill))] <- "gray"fill[i1 <- c(1,nrow(fill)) , ] <- "gray"

par(bg = "slategray",mar=rep(.5,4))persp(x, y, z, theta = 135, phi = 30, col = fill, scale = FALSE, ltheta = -120, lphi = 15, shade = 0.65,

axes = FALSE)

Projeto RUniversidade Federal Rural do Semi-

Árido26

Projeto RUniversidade Federal Rural do Semi-

Árido27

z <- 2 * volcano # Exaggerate the reliefx <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

z0 <- min(z) - 20z <- rbind(z0, cbind(z0, z, z0), z0)x <- c(min(x) - 1e-10, x, max(x) + 1e-10)y <- c(min(y) - 1e-10, y, max(y) + 1e-10)

fill <- matrix("green3", nr = nrow(z)-1, nc = ncol(z)-1)fill[ , i2 <- c(1,ncol(fill))] <- "gray"fill[ , i2 <- c(1,ncol(fill))] <- "gray"fill[i1 <- c(1,nrow(fill)) , ] <- "gray"

fcol <- fillzi <- volcano[ -1,-1] + volcano[ -1,-61] ++ volcano[-87,-1] + volcano[-87,-61] ## / 4fcol[-i1,-i2] <- terrain.colors(20)[cut(zi, quantile(zi, seq(0,1, len = 21)), include.lowest = TRUE)]par(mar=rep(.5,4))persp(x, y, 2*z, theta = 110, phi = 40, col = fcol, scale = FALSE, ltheta = -120, shade = 0.4, border = NA,

box = FALSE)

Projeto RUniversidade Federal Rural do Semi-

Árido28

Projeto RUniversidade Federal Rural do Semi-

Árido29

Lattice e ncdf

Com os packages lattice e ncdf, podemos fazer coisas incríveis como o sólido abaixo:

Projeto RUniversidade Federal Rural do Semi-

Árido30

Para produzir isso, devemos utilizar o algoritmo do próximo slide

library(grid) library(lattice)

plotMesh.grid<-function(l, z, rot.mat=diag(rep(1,1)), dist = 0.1) ## rot.mat: 4x4 transformation matrix ## dist: controls perspective, 0 = none {x <- ltransform3dto3d(l[,z], rot.mat, dist = dist) id <- seq(length = ncol(x) / 3) ord <- order(x[3, id * 3] + x[3, id * 3 - 1] + x[3, id * 3 - 2])

grid.newpage() xscale <- range(x[1,]) yscale <- range(x[2,]) md <- max(diff(xscale), diff(yscale)) pushViewport(viewport(w = 0.9 * diff(xscale) / md, h = 0.9 * diff(yscale) / md, xscale = xscale, pushViewport(viewport(w = 0.9 * diff(xscale) / md, h = 0.9 * diff(yscale) / md, xscale = xscale,

yscale = yscale)) id <-as.vector(outer(1:3, (id[ord]-1) * 3, "+")) grid.polygon(x = x[1,id], y = x[2,id], default.units = "native", gp = gpar(fill = "gray"), id =

rep(id[ord], each = 3)) } rot.mat <- ltransform3dMatrix(list(y = -30, x = 40)) library(ncdf) teapot<-open.ncdf("teapot.nc") z<-get.var.ncdf(teapot,"tris") l<-get.var.ncdf(teapot,"locations") plotMesh.grid(l, z, rot.mat, dist = 0)

Projeto RUniversidade Federal Rural do Semi-

Árido31

Fontes:

• http://wiki.r-project.org/rwiki/doku.php?id=tips:graphics-3d:graphics-3d

• Help do R

• Apostila GenMelhor - Emanuel Fernando Maia de Souza, Luiz Alexandre Peternelli, Márcio Pupin de Mello

Projeto RUniversidade Federal Rural do Semi-

Árido32