O R é um poderoso software para edição de gráficos. Nesse livro iremos trabalhar com o pacote “graphics” já instalado no R base. A lista de argumentos utilizados na construção de gráficos pode ser acessada fazedo ?par() no console do R: Tipos de comandos: alto nível, baixo nível e interativos - Comandos de alto nível (criam gráficos completos) plot(); boxplot(); e hist(). - Comandos de baixo nível (adicionam informações a algum gráfico já existente) points(); lines(); e title(). - Comandos interativos (permitem que o usuário interaja com a janela gráfica) identify()
Sintaxe plot(x, y, type = “”, main = “”, sub = “”, xlab = “”, ylab = “”, asp = “”….)
library(data.table)
teca <- fread("Tectona.csv")
print(teca)
## Arvore DAP H Volume
## 1: 1 6.6 8.90 0.017
## 2: 2 6.8 7.95 0.017
## 3: 3 7.0 6.87 0.014
## 4: 4 7.1 12.70 0.027
## 5: 5 7.5 11.74 0.028
## 6: 6 9.9 13.84 0.066
## 7: 7 10.8 15.25 0.049
## 8: 8 11.2 13.00 0.058
## 9: 9 11.3 14.60 0.066
## 10: 10 11.7 15.60 0.083
## 11: 11 12.6 17.20 0.100
## 12: 12 14.0 16.60 0.127
## 13: 13 14.3 17.87 0.158
## 14: 14 14.6 17.90 0.141
## 15: 15 14.9 16.50 0.132
## 16: 16 15.0 18.30 0.153
## 17: 17 15.3 17.40 0.162
## 18: 18 15.4 17.55 0.139
## 19: 19 16.2 16.99 0.192
## 20: 20 17.1 17.72 0.158
## 21: 21 17.4 16.20 0.196
## 22: 22 18.0 16.10 0.197
## 23: 23 18.1 15.34 0.250
## 24: 24 19.2 16.15 0.203
## 25: 25 19.8 14.38 0.262
## 26: 26 20.6 22.00 0.317
## 27: 27 22.5 20.60 0.377
## 28: 28 23.5 16.70 0.263
## 29: 29 23.8 22.80 0.395
## 30: 30 32.6 21.55 0.603
## Arvore DAP H Volume
Inicialmente, uma análise exploratória do conjunto de dados:
str(teca) # estrutura do conjunto de dados
## Classes 'data.table' and 'data.frame': 30 obs. of 4 variables:
## $ Arvore: int 1 2 3 4 5 6 7 8 9 10 ...
## $ DAP : num 6.6 6.8 7 7.1 7.5 9.9 10.8 11.2 11.3 11.7 ...
## $ H : num 8.9 7.95 6.87 12.7 11.74 ...
## $ Volume: num 0.017 0.017 0.014 0.027 0.028 0.066 0.049 0.058 0.066 0.083 ...
## - attr(*, ".internal.selfref")=<externalptr>
dim(teca) # dimensão do conjunto de dados
## [1] 30 4
summary(teca) # um rápido sumário estatístico
## Arvore DAP H Volume
## Min. : 1.00 Min. : 6.60 Min. : 6.87 Min. :0.0140
## 1st Qu.: 8.25 1st Qu.:11.22 1st Qu.:14.44 1st Qu.:0.0660
## Median :15.50 Median :14.95 Median :16.35 Median :0.1470
## Mean :15.50 Mean :15.16 Mean :15.88 Mean :0.1650
## 3rd Qu.:22.75 3rd Qu.:18.07 3rd Qu.:17.68 3rd Qu.:0.2015
## Max. :30.00 Max. :32.60 Max. :22.80 Max. :0.6030
Criando um gráfico de dispersão entre diâmetro (cm) e altura (m). O default da função plot() é usar type = “p”. No entanto outros tipos de plotagem (type) estão disponíveis. O argumento type pode assumir: (“p” = points, “l” = lines, “b” = both, “c” = lines part alone of “b”, “o” = ‘overplotted’, “h” = ‘histogram’, “s” = stair steps, “S” = other steps, “n” = no plotting).
#Modificando o tipo de gráfico (type)
plot(teca$DAP, teca$V, main = "type = default")
plot(teca$DAP, teca$V, type="l", main = "type = l")
plot(teca$DAP, teca$V, type="b", main = "type = b")
plot(teca$DAP, teca$V, type="o", main = "type = o")
Adicionando título, subtítulo e rótulos Usar os comandos main e sub para adicionar um título e subtítulo ao gráfico. Para modificar os títulos dos eixos usar os comandos xlab = “Título do eixo x” e ylab = “Título do eixo y”.
#Adicionando título, subtítulo e rótulos
plot(teca$DAP, teca$V, type = "o", main = "Relação DAP-Volume")
plot(teca$DAP, teca$V, type = "o", main = "Relação DAP-Volume", sub = "(Árvores de Tectona grandis)")
plot(teca$DAP, teca$V, type = "o", main = "Relação DAP-Volume", xlab = "DAP (cm)")
plot(teca$DAP, teca$V, type = "o", main = "Relação DAP-Volume", xlab = "DAP (cm)", ylab = expression(Volume ~ (m^3)))
Modificando tipos de pontos (pch) Pode-se alterar o tipo de ponto usando o comando pch, que recebe um valor numérico que define o tipo de ponto plotado no gráfico.
#Modificando tipos de pontos (pch)
plot(teca$DAP, teca$V, pch=0, main = "pch=0")
plot(teca$DAP, teca$V, pch=4, main = "pch=4")
plot(teca$DAP, teca$V, pch=17, main = "pch=17 (triângulo sólido)")
plot(teca$DAP, teca$V, pch="M", main = "pch=M")
plot(teca$DAP, teca$V, pch="T", main = "pch=T")
plot(teca$DAP, teca$V, pch="1", main = "pch=1 (entre aspas)")
Modificando tipos de linhas (lty) Pode-se alterar o tipo de linha usando o comando lty, que assume um valor numérico que varia de 0 a 6.
#Modificando tipos de linhas (lty)
plot(teca$DAP, teca$V, type="l", main = "default (solid)")
plot(teca$DAP, teca$V, type="l", lty=0, main = "sem linha")
plot(teca$DAP, teca$V, type="l", lty=2, main = "dashed")
plot(teca$DAP, teca$V, type="l", lty=4, main = "dotdash")
plot(teca$DAP, teca$V, type="l", lty=5, main = "longdash")
plot(teca$DAP, teca$V, type="l", lty=6, main = "twodash")
Modificando a largura das linhas (lwd) Pode-se alterar a largura da linha usando o comando lwd, que assume sempre um valor numérico positivo maior ou igual a 1.
#Modificando a largura das linhas (lwd)
plot(teca$DAP, teca$V, type="l", lty=2, main = "default")
plot(teca$DAP, teca$V, type="l", lty=2, lwd=2, main = "lwd=2")
plot(teca$DAP, teca$V, type="l", lty=2, lwd=4, main = "lwd=4")
plot(teca$DAP, teca$V, type="l", lty=2, lwd=15, main = "lwd=15")
Modificando cores de pontos e linhas (col) Pode-se alterar a cor das linhas e pontos. Basta usar o comando col e especificar entre aspas a cor desejada. A função colors() fornece uma variedade de cores disponíveis para uso. Utilize a função demo(“colors”) para visualizar uma demostração de cores.
#Modificando cores de pontos e linhas (col)
head(colors(), 40)
## [1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
## [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
## [9] "aquamarine1" "aquamarine2" "aquamarine3" "aquamarine4"
## [13] "azure" "azure1" "azure2" "azure3"
## [17] "azure4" "beige" "bisque" "bisque1"
## [21] "bisque2" "bisque3" "bisque4" "black"
## [25] "blanchedalmond" "blue" "blue1" "blue2"
## [29] "blue3" "blue4" "blueviolet" "brown"
## [33] "brown1" "brown2" "brown3" "brown4"
## [37] "burlywood" "burlywood1" "burlywood2" "burlywood3"
length(colours())
## [1] 657
plot(teca$DAP, teca$V, pch=0, col="red", main = "col = red")
plot(teca$DAP, teca$V, pch=15, col="lightblue", main = "col = lightblue")
plot(teca$DAP, teca$V, type="l", lty=2, lwd=4, col="yellow", main = "col = yellow")
plot(teca$DAP, teca$V, type="l", lty=2, lwd=2, col="green3", main = "col = green3")
Modificando cores do título e eixos (col.main, col.lab e col.axis) Podem-se alterar as cores do título e labels dos eixos x e y usando os comandos col.main e col.lab. O comando col.axis pode ser usado para modificar as cores dos valores dos eixos. Além disso, existem comandos de baixo nível que realizam as mesmas tarefas: title().
#Modificando cores do título e eixos (col.main, col.lab e col.axis)
plot(teca$DAP, teca$V, type="o", main="Relação DAP-Volume", xlab="DAP (cm)",
ylab=expression(Volume ~ (m^3)),
col.main="red4")
plot(teca$DAP, teca$V, type="o", main="Relação DAP-Volume", xlab="DAP (cm)",
ylab=expression(Volume ~ (m^3)),
col.main="red4", col.lab="orange3")
plot(teca$DAP, teca$V, type="o", main="Relação DAP-Volume", xlab="DAP (cm)",
ylab=expression(Volume ~ (m^3)),
col.main="red4", col.lab="orange3", col.axis="green4")
plot(teca$DAP, teca$V, type="o", xlab="", ylab="")
title("Relação DAP-Volume",
col.main="purple",
xlab="DAP (cm)", ylab=expression(Volume ~ (m^3)), col.lab="green4")
Modificando os limites dos eixos (xlim, ylim e axis) Podem-se alterar os limites dos eixos (mínimos e máximos) usando os comandos xlim e ylim. Além disso, o comando axis pode ser usado para obter uma maior personalização dos eixos. Porém, no plot original deve constar axis = FALSE.
#Modificando os limites dos eixos (xlim, ylim e axis)
plot(teca$DAP, teca$V, pch=0, col="red", xlim=c(0, 40), ylim=c(0, 0.8),
main="xlim=c(0, 40) e ylim=c(0, 0.8)")
plot(teca$DAP, teca$V, pch=0, col="red", xlim=c(6, 30), ylim=c(0, 0.8),
main="xlim=c(6, 30) e ylim=c(0, 0.8)")
plot(teca$DAP, teca$V, pch=0, col="red", xlim=c(5, 18), ylim=c(0, 0.5),
main="xlim=c(5, 18) e ylim=c(0, .5)")
plot(teca$DAP, teca$V, pch=0, col="red", xlim=c(min(teca$DAP), max(teca$DAP)),
ylim=c(min(teca$V), max(teca$V)), main="xlim=c(min, max) e ylim=c(min, max)")
plot(teca$DAP, teca$V, pch=0, col="red", axes=F)
axis(1, seq(from = round(min(teca$DAP),2),
to = round(max(teca$DAP),2),
by = 2))
axis(2, seq(from = round(min(teca$V),2),
to = round(max(teca$V),2),
by = 0.1))
Modificando as bordas dos gráficos (bty) Pode-se alterar o estilo de borda do gráfico usando o comando bty. As opções disponíveis são: bty =“o”, “l”, “7”, “c”, “u”, “]”. Também pode ser o usado o comando box( ) após a chamada do gráfico.
#Modificando as bordas dos gráficos (bty)
plot(teca$DAP, teca$V, pch=0, col="red", bty="o", main="bty = o (default")
plot(teca$DAP, teca$V, pch=0, col="red", bty="l", main="bty = l")
plot(teca$DAP, teca$V, pch=0, col="red", bty="7", main="bty = 7")
plot(teca$DAP, teca$V, pch=0, col="red", bty="c", main="bty = c")
plot(teca$DAP, teca$V, pch=0, col="red", bty="u", main="bty = u")
plot(teca$DAP, teca$V, pch=0, col="red", bty="]", main="bty = ]")
plot(teca$DAP, teca$V, pch=0, col="red", main="Função = box()")
box(which="plot", lty=2, bty ="l", lwd=5)
Modificando o comprimento e a direção dos marcadores de eixos (tcl)
#Modificando o comprimento e a direção dos marcadores de eixos (tcl)
plot(teca$DAP, teca$V, main = "type = default")
plot(teca$DAP, teca$V, type="l", main = "type = l")
plot(teca$DAP, teca$V, type="b", main = "type = b")
plot(teca$DAP, teca$V, type="o", main = "type = o")
Modificando a orientação dos valores nos eixos (las)
#Modificando a orientação dos valores nos eixos (las)
plot(teca$DAP, teca$V, pch=0, las=0, main="paralelos aos eixos")
plot(teca$DAP, teca$V, pch=0, las=1, main="sempre horizontais")
plot(teca$DAP, teca$V, pch=0, las=2, main="perpendiculares aos eixos")
plot(teca$DAP, teca$V, pch=0, las=3, main="sempre verticais")
Modificando o tamanho dos pontos (cex)
#Modificando o tamanho dos pontos (cex)
plot(teca$DAP, teca$V, pch=0, main="cex = 1 (default)")
plot(teca$DAP, teca$V, pch=0, cex=0.5, main="cex = 0.5")
plot(teca$DAP, teca$V, pch=0, cex=1.5, main="cex = 1.5")
plot(teca$DAP, teca$V, pch=0, cex=3, main="cex = 3")
Modificando o tamanho do título, valores e labels dos eixos (cex.main, cex.axis e cex.lab)
#Modificando o tamanho do título, valores e labels dos eixos (cex.main, cex.axis e cex.lab)
plot(teca$DAP, teca$V, pch=0, main="default")
plot(teca$DAP, teca$V, pch=0, main="Relação DAP-Volume", cex.main=1.5)
plot(teca$DAP, teca$V, pch=0, main="Relação DAP-Volume", cex.main=2)
plot(teca$DAP, teca$V, pch=0, cex.axis=.5, main="cex.axis = .5")
plot(teca$DAP, teca$V, pch=0, cex.axis=1.5, main="cex.axis = 1.5")
plot(teca$DAP, teca$V, pch=0, xlab="DAP (cm)",cex.lab=.5, main="cex.lab = .5")
plot(teca$DAP, teca$V, pch=0, xlab="DAP (cm)",cex.lab=1.5, main="cex.lab = 1.5")
#Usando o comando title( )
plot(teca$DAP, teca$V, pch=0, xlab="")
title(main="Relação DAP-Volume", cex.main=2, xlab="DAP (cm)", cex.lab=1.5)
A função hist() A função genérica hist() gera um histograma para o conjunto de dados fornecidos. Caso a especificação seja plot = TRUE (default), um histograma é plotado. Do contrário, se plot = FALSE a função apenas calcula internamente todos os parâmetros de hist(). Você pode acessar os argumentos da função fazendo: ?hist ou ?plot.histogram. hist(x, breaks = “Sturges”, nrow, freq = NULL, include.lowest = TRUE, right = TRUE, col = NULL, border = NULL, main = “Histogram of”, xlim = range(breaks), ylim = NULL, xlab, ylab, axes = TRUE, right = TRUE) x = conjunto de dados; breaks = define os intervalos da classe - pode ser uma função, vetor, número; freq = se TRUE = frequência (contagem), FALSE = densidade (probabilidade); include.lowest = incluir o menor valor no intervalo definido pelo break; col e border = cores das barras e das bordas; main = Título do gráfico; xlim e ylim = limites dos eixos; xlab e ylab = título dos eixos; axes = se axes = TRUE os eixos são desenhados; e right = se right = TRUE intervalo aberto a esquerda.
#Histograma
hist(teca$DAP, main="default")
rug(teca$DAP) #Adiciona a quantidade de observações dentro do intervalo de classes, representado pelas linhas dispostas abaixo das barras do histograma
Modificando o intervalo das classes
#Modificando o intervalo das classes
hist(teca$DAP, right = TRUE); rug(teca$DAP)
hist(teca$DAP, right = FALSE); rug(teca$DAP)
#Outro exemplo
x <- c(2,2,2,3,4,4,5,6,7,7,7,8)
hist(x, right=TRUE)
hist(x, right=FALSE)
hist(x, right = TRUE, include.lowest = TRUE) #Mensagem de aviso, pois falta o argumento breaks
hist(x, right = TRUE, include.lowest = FALSE)
## Warning in hist.default(x, right = TRUE, include.lowest = FALSE):
## 'include.lowest' ignored as 'breaks' is not a vector
## Warning in hist.default(x, right = TRUE, include.lowest = FALSE):
## 'include.lowest' ignored as 'breaks' is not a vector
hist(x, right = TRUE, include.lowest = FALSE, breaks=1:8) #Intervalo entre as classes
Modificando os breaks (intervalos de classe)
#Modificando os breaks (intervalos de classe)
hist(teca$DAP, col="red4", probability = TRUE)
hist(teca$DAP, col="red4", probability = TRUE,
breaks = c(c(0,5), c(5,10), c(10,15), c(15,20), c(20,25), c(25,30), c(30,35)),
ylim=c(0,0.06)) #Os breaks indicam que o gráfico deve ter classes de 0 até 5, 5 até 10, 10 até 15 e assim por diante
Parâmetros do histograma
#Parâmetros do histograma
hist <- hist(teca$DAP)
hist$breaks # breakpoints (Regra de Sturges).
## [1] 5 10 15 20 25 30 35
## [1] 5 10 15 20 25 30 35
hist$counts # frequência absoluta em cada classe.
## [1] 6 10 9 4 0 1
## [1] 6 10 9 4 0 1
hist$mids # ponto médio das classes.
## [1] 7.5 12.5 17.5 22.5 27.5 32.5
## [1] 7.5 12.5 17.5 22.5 27.5 32.5
hist$density
## [1] 0.040000000 0.066666667 0.060000000 0.026666667 0.000000000 0.006666667
## [1] 0.040000000 0.066666667 0.060000000 0.026666667 0.000000000 0.006666667
Modificando as cores das colunas e bordas (col e border)
#Modificando as cores das colunas e bordas (col e border)
hist(teca$DAP, col="red4")
hist(teca$DAP, col="green")
hist(teca$DAP, col="red4")
hist(teca$DAP, col="red4", border="blue")
Mostrando as probabilidades (density)
#Mostrando as probabilidades (density)
hist(teca$DAP)
hist(teca$DAP, probability = TRUE) # density = 0 a 1
Número de classes (nc)
#Número de classes (nc)
hist(teca$DAP, main = "nc = Sturges")
hist(teca$DAP, nc = 10, main = "nc = 10")
hist(teca$DAP, nc = 6, main = "nc = 6")
hist(teca$DAP, nc = 3, main = "nc = 3")
A função pie() (setores) A função genérica pie() pode ser usada para construir um gráfico de setores. Para saber mais sobre a função faça: ?pie. Os principais argumentos da função são: labels = vetor contendo os rótulos de cada fatia; radius = raio da circunferência do gráfico (default=1); e col = vetor contendo as cores de cada fatia. A seguir um gráfico de setores é construído a partir de um data frame com as contagens já disponíveis:
#A função pie() (setores)
df <- data.frame(
especie = c("Araucaria", "Acapu", "Mogno", "Ipe"),
contagem = c(15, 30, 10, 20))
print(df)
## especie contagem
## 1 Araucaria 15
## 2 Acapu 30
## 3 Mogno 10
## 4 Ipe 20
pie(df$contagem, labels = df$especie, main="")
Usando a função table() Para obter contagens de fatores pode-se usar a função table(). Vamos obter uma tabela de contagem para o conjunto de dados iris. Quantas flores existem de cada espécie (setosa, virginica e versicolor)?
#Usando a função table()
table(iris$Species)
##
## setosa versicolor virginica
## 50 50 50
## setosa versicolor virginica
## 50 50 50
pie(table(iris$Species))
Modificando cores (col)
#Modificando cores (col)
#Um esquema de cores
pie(rep(1, 24), col = rainbow(24), radius = 1)
#Modificando a cor das fatias
pie(table(iris$Species),col = c("purple", "violetred1", "green3"))
pie(table(iris$Species),col = gray(seq(0.4, 1.0, length = 6))) #Níveis de cinza
#Modificando o sentido do desenho das fatias (horário e anti-horário)
pie(table(iris$Species), col = c("purple", "violetred1", "green3"), clockwise = TRUE)
pie(table(iris$Species), col = c("purple", "violetred1", "green3"), clockwise = FALSE)
#Modificando o tamanho do gráfico (radius)
pie(table(iris$Species), radius=0.3, col = c("purple", "violetred1", "green3"),
main = "radius=0.3")
pie(table(iris$Species), radius=0.5, col = c("purple", "violetred1", "green3"),
main = "radius=0.5")
pie(table(iris$Species), radius=0.7, col = c("purple", "violetred1", "green3"),
main = "radius=0.7")
pie(table(iris$Species), radius=1, col = c("purple", "violetred1", "green3"),
main = "radius=1")
A função boxplot() A função boxplot() pode ser usada para obter um gráfico de boxplot, também chamado de “gráfico de caixa”. A seguir serão feitos gráficos boxplot para cada espécie de iris, para as variáveis ‘Sepal.Width’ e ‘Petal.Width’. Os argumentos da função boxplot são inseridos y~x, diferente dos gráficos mostrados anteriormente, sendo x uma variável categórica.
#Boxplot
boxplot(Sepal.Width ~ Species, data=iris)
boxplot(Petal.Width ~ Species, data=iris)
#Modificando as cores das caixas (col)
boxplot(Sepal.Width~Species, data=iris, col=c("red4", "green", "blue"))
#Plotando os outliers (outline)
boxplot(Petal.Length ~ Species, data=iris, col=c("red4", "green", "blue"), outline=TRUE)
boxplot(Petal.Length ~ Species, data=iris, col=c("red4", "green", "blue"), outline=FALSE)
#Alterando a orientação (horizontal)
boxplot(Petal.Length~Species, data=iris, col=c("red4", "green", "blue"), outline=FALSE, horizontal=FALSE)
boxplot(Petal.Length~Species, data=iris, col=c("red4", "green", "blue"), outline=FALSE, horizontal=TRUE)
#Inserindo a variação dentro da caixa do boxplot (varwidth)
#O commando varwith( ) dimensiona o tamanho das caixas de acordo com o número de observações em cada fator. É um bom argumento para ser usado demostrar a variação de observações entre tratamentos, locais ou espécies....
boxplot(Sepal.Width~Species, data=iris, col=c("red4", "green", "blue"), outline=TRUE, varwidth=FALSE)
boxplot(Sepal.Width~Species, data=iris, col=c("red4", "green", "blue"), outline=TRUE, varwidth=TRUE)
Adicionando “elementos” a um gráfico existente
#Adicionando pontos (points())
plot(teca$DAP, teca$V, pch=19)
points(rev(teca$DAP), teca$V, col="red", pch=10)
Adicionando linhas (lines()) O comando lines() é muito usado para adicionar a linha de ajuste de regressão linear simples.
#Adicionando linhas (lines())
plot(teca$DAP, teca$V, pch=19)
lines(teca$DAP, teca$V*1.5, col="red4")
lines(teca$DAP, teca$V/2, col="blue")
Adicionando retas (ablines())
#Modificando o intervalo das classes
plot(teca$DAP, teca$V, pch=19)
# x = intercepto e y = beta 1
abline(lm(teca$V ~ teca$DAP)$coefficients[1], lm(teca$V ~ teca$DAP)$coefficients[2],
col="red", lwd=2, lty=1)
#A função “lm” será trabalhada mais adiante aqui ela foi usada apenas como ilustração
abline(h=.4, col="red4")
abline(h=.2, col="red4", lwd=4)
# Reta horizontal passando por y=200 na cor vermelha
abline(v=10, col="yellow", lty=3, lwd=5)
# Reta vertical amarela x=10, pontilhada e largura de 5
abline(v=10, col="red", lty=3, lwd=1)
# Ficou na frente da linha anterior
Adicionando texto (text())
#Adicionando texto (text())
plot(teca$DAP, teca$V, pch=19)
text(10,0.6, "Tectona grandis")
text(16,0.5, "R para floresta")
Múltiplos gráficos na mesma janela
# Múltiplos gráficos na mesma janela
# Duas linhas e duas colunas
op <- par(mfrow = c(2,2)) #Preenchimento por linha
plot(teca$DAP, teca$V, pch=14, col="green")
plot(teca$DAP, teca$V, type="l", lty=5, lwd=4)
boxplot(Sepal.Length ~ Species, data=iris, col="blue4")
hist(teca$H, nc=5, col= "orange")
par(op) #Utiliza esse argumento para finalizar o comando par, ou seja, para que os próximos gráficos a serem feitos não apareçam em uma janela gráfica com vários gráficos
plot(teca$DAP, teca$H, pch=14) #Janela gráfica com um gráfico apenas
Configurando as margens da janela gráfica
#Configurando as margens da janela gráfica
# Margens - mar(bottom, left, top, right)
op <- par(mfrow=c(2,2), mar = c(4.5,3,1,1))
plot(teca$DAP, teca$V, pch=14)
plot(teca$DAP, teca$V, pch=20)
plot(teca$DAP, teca$V, type="l", lty=2, col="blue4")
hist(teca$DAP, nc=5)
par(op) #A unidade das margens são polegadas (inches)