gráficos no r - portal ufersa · para modificar o modo de como o gráfico é apresentado, podemos...
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
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
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
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
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
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
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
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