Gráficos no
Valeska Andreozzi
[email protected]
Centro de Estatı́stica e Aplicações da Universidade de Lisboa
Faculdade de Ciências da Universidade de Lisboa
Lisboa, 2012
Sumário
1 Referências
2
2 Demonstrações de gráficos
2
3 Exemplo
3
4 Gráfico de dispersão
3
5 Incluindo uma linha ou pontos num gráfico
4
6 Gráfico de barras
5
7 Cores
7
8 Incluindo um texto no gráfico
8
9 Vários gráficos numa janela
10
9.1
Áreas de tamanhos iguais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
9.2
Exercı́cio
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
9.3
Áreas de tamanhos diferentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
1
Valeska Andreozzi
Gráficos no R
10 Alteração de parâmetros gráficos
12
10.1 Tipo de pontos: pch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
10.2 Tipo de gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
10.3 Largura da linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
10.4 Tipo da linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
10.5 Eixos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
11 Ajuda
16
12 Exercı́cio
16
13 Gráficos condicionais
16
14 Mais um gráfico interessante
18
14.1 Gráfico para série temporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
14.2 Exercı́cio
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 Gráficos multivariados
15.1 Exercı́cio
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
16 Gravando um gráfico em arquivo
21
17 Gráficos mais especializados
21
1
Referências
• Visualização de dados em
http://neacm.fe.up.pt/CRAN/doc/contrib/Torgo-ProgrammingIntro.pdf
• http://addictedtor.free.fr/graphiques/
• http://bm2.genes.nig.ac.jp/RGM2/pkg.php?p=graphics
O R permite elaborar gráficos com grande qualidade. A seguir serão ilustrados alguns exemplos.
2
Demonstrações de gráficos
demo()
demo(graphics)
demo(image)
demo(persp)
demo(plotmath)
Os gráficos serão abordados de forma prática através de exemplos.
2
Valeska Andreozzi
3
Gráficos no R
Exemplo
Primeiro Vamos trabalhar com o seguinte banco de dados:
milsa <- read.table("http://www.leg.ufpr.br/~paulojus/aulasR/dados/milsa.dat",
head = T)
names(milsa)
str(milsa)
head(milsa)
Transformando os dados do banco de dados milsa
dados <- transform(milsa, civil = factor(civil, label = c("solteiro",
"casado"), levels = 1:2), instrucao = factor(instrucao, label = c("1oGrau",
"2oGrau", "Superior"), lev = 1:3, ord = T), regiao = factor(regiao,
label = c("capital", "interior", "outro"), lev = c(2, 1, 3)))
dados <- transform(dados , idade = ano + mes/12)
names(dados)
head(dados)
4
Gráfico de dispersão
A função plot é utilizada para fazer um gráfico de dispersão (de pontos).
35
30
25
20
dados$idade
40
45
50
plot(dados$idade)
0
5
10
15
20
25
30
35
Index
plot(dados$idade,dados$salario)
3
Gráficos no R
5
10
15
dados$salario
20
Valeska Andreozzi
20
25
30
35
40
45
50
dados$idade
plot(dados)
1.8
0 2 4
20
40
1.0
2.5
20
1.0
1.8
0
funcionario
2.5
1.0
civil
0 2 4
1.0
instrucao
5 15
filhos
40
salario
6
20
ano
2.5
0
mes
40
1.0
regiao
20
idade
0
20
1.0
2.5
5 15
0
6
20
40
plot(dados[,c("filhos", "salario","idade")])
10
15
20
3
4
5
5
15
20
0
1
2
filhos
40
45
50
5
10
salario
20
25
30
35
idade
0
5
1
2
3
4
5
20
25
30
35
40
45
50
Incluindo uma linha ou pontos num gráfico
Para incluir uma linha num gráfico podemos utilizar a função abline() ou lines(). Para incluir
pontos num gráfico existente podemos utilizar a função points(). Vejamos um exemplo com a
função abline() :
plot(dados$idade,dados$salario)
abline(h=15)
abline(v=35)
abline(a=0,b=1)
4
Gráficos no R
5
10
15
dados$salario
20
Valeska Andreozzi
20
25
30
35
40
45
50
dados$idade
6
Gráfico de barras
O argumento principal do gráfico de barras é a altura, que pode ser dada na forma de um vetor ou
de uma matrix. A função table pode ser utilizada para criar o objeto que contenha as alturas das
barras. Veja o exemplo para a variável regiao
0
2
4
6
8
10
12
t1<-table(dados$regiao)
t1
barplot(t1,col=1:3)
capital
interior
outro
Vamos criar uma tabela com o percentual de solteiros e casados para cada nı́vel de escolaridade
library(gmodels)
tabela<-CrossTable(dados$civil,dados$instrucao)
names(tabela)
x<-tabela$prop.col
barplot(x)
5
Gráficos no R
0.0
0.2
0.4
0.6
0.8
1.0
Valeska Andreozzi
1oGrau
2oGrau
Superior
barplot(x,beside=T)
Para acrescentar uma legenda, usamos o argumento legend=T
barplot(x,beside=T,legend=T,col=3:4)
0.0
0.1
0.2
0.3
0.4
0.5
0.6
solteiro
casado
1oGrau
2oGrau
Superior
Podemos aumentar a escala do eixo dos y para a legenda não ficar por cima das barras
0.8
barplot(x,beside=T,legend=T,col=3:4,ylim=c(0,.8))
0.0
0.2
0.4
0.6
solteiro
casado
1oGrau
2oGrau
Superior
Outro exemplo
barplot(table(dados$instrucao,dados$civil),beside=T,legend=T,col=3:5)
6
Gráficos no R
12
Valeska Andreozzi
0
2
4
6
8
10
1oGrau
2oGrau
Superior
solteiro
casado
Podemos mudar o texto da legenda com o argumento legend.text=
12
barplot(table(dados$instrucao,dados$civil),beside=T,col=3:5,
legend.text=c("básico","secundário","superior"))
0
2
4
6
8
10
básico
secundário
superior
solteiro
casado
Podemos mudar vários elementos da legenda fornecendo uma lista de valores para o argumento
args.legend =. No exemplo a seguir foi alterada a posição da legenda (x = "topleft" ) e também
foi retirada a caixa em volta da legenda com o argumento bty="n"
básico
secundário
superior
0
2
4
6
8
10
12
barplot(table(dados$instrucao,dados$civil),beside=T,col=3:5,
legend.text=c("básico","secundário","superior"),
args.legend = list(x = "topleft",bty="n"))
solteiro
7
casado
Cores
Uma ótima referência para trabalhar com as cores está em
http://research.stowers-institute.org/efg/R/Color/Chart/
7
Valeska Andreozzi
Gráficos no R
A função colours() lista o nome das cores que podemos utilizar no R
colours()
colours()[4:6]
Para selecionar todas as cores que incluem a palavra red usamos a funçao grep
grep("red",colours())
vermelhos<-colors()[grep("red",colors())]
vermelhos
barplot(t1,col=vermelhos[4:6])
8
Incluindo um texto no gráfico
Podemos incluir um texto no gráfico com a função () ou com a função locator, como veremos a
seguir.
12
barplot(t1,col=colours()[4:6])
t1.prop<-prop.table(t1)
t1.prop
texto<-paste(round(t1.prop*100,2),"%",sep="")
texto
text(locator(n=3),texto)
36.11%
0
2
4
6
8
10
33.33%
30.56%
capital
interior
outro
Outra possibilidade é usar a funçao text(). Para isso é necessário fornecer
os valores das abiscissa e das ordenadas onde serão incluı́dos oss textos.
8
Valeska Andreozzi
Gráficos no R
2
4
6
8
10
12
x<-barplot(t1,col=colours()[406:408])
text(x,1,texto)
33.33%
36.11%
capital
interior
outro
0
30.56%
Outro exemplo com tabela de contingência
t2<-with(dados,table(instrucao,civil))
t2
plot(t2)
t2
2oGrau
Superior
casado
civil
solteiro
1oGrau
instrucao
Alterando o tı́tulo e os nome dos eixos
plot(t2,main="Estado Civil vs Escolaridade",xlab="Escolaridade",
ylab="Estado Civil",col="lightblue")
Estado Civil vs Escolaridade
2oGrau
Superior
casado
Estado Civil
solteiro
1oGrau
Escolaridade
barplot(t2)
9
Gráficos no R
0
5
10
15
20
Valeska Andreozzi
solteiro
casado
12
barplot(t2,beside=T,legend=T,args.legend = list(x = "topleft",bty="n"),
names.arg=c("Solteiros","Casados"))
0
2
4
6
8
10
1oGrau
2oGrau
Superior
Solteiros
9
Casados
Vários gráficos numa janela
9.1
Áreas de tamanhos iguais
par(mfrow=c(2,2))
hist(dados$idade)
hist(dados$idade,main="Histograma da idade",xlab="idade",
ylab="Frequ^
encia absoluta",col="yellow",border="red")
boxplot(idade~regiao,data=dados,col=3:5,ylab="idade")
title("Distribuiç~
ao da Idade por Regi~
ao")
pie(table(dados$regiao),main="Gráfico de setores: Regi~
ao")
0
2
4
6
8 10
Histograma da idade
Frequência absoluta
8 10
6
4
0
2
Frequency
Histogram of dados$idade
20
25
30
35
40
45
50
20
25
30
35
40
45
50
idade
Distribuição da Idade por Região
Gráfico de setores: Região
50
dados$idade
30
outro
20
idade
40
capital
interior
capital
interior
outro
10
Valeska Andreozzi
9.2
Gráficos no R
Exercı́cio
Faça os seguintes gráficos numa mesma janela gráfica utilizando o objeto dados
1. gráfico de dispersão idade X salario
2. gráfico de dispersão idade X filhos
3. gráfico de dispersão salario X filhos
4. gráfico de barras de estado civil X região
Use a imaginação e mude as cores default dos gráficos, inclua um tı́tulo, uma legenda.
9.3
Áreas de tamanhos diferentes
Para subdividir a janela gráfica em gráficos de tamanhos diferentes, usamos a função layout().
No exemplo a seguir temos um janela gráfica dividida em 4 partes iguais.
y<-matrix(1:4,2,2)
y
layout(y)
hist(dados$idade)
hist(dados$idade,main="Histograma da idade",xlab="idade",
ylab="Frequ^
encia absoluta",col="yellow",border="red")
boxplot(idade~regiao,data=dados,col=3:5,ylab="idade")
title("Distribuiç~
ao da Idade por Regi~
ao")
pie(table(dados$regiao),main="Gráfico de setores: Regi~
ao")
Distribuição da Idade por Região
idade
30
40
8 10
6
4
20
0
2
Frequency
50
Histogram of dados$idade
20
25
30
35
40
45
50
capital
interior
outro
dados$idade
8 10
Gráfico de setores: Região
capital
2
4
6
interior
outro
0
Frequência absoluta
Histograma da idade
20
25
30
35
40
45
50
idade
Agora temos a primeira linha com o dobro de tamanho da segunda acrescentando o argumento
height=.
layout(y,height=c(2,1))
hist(dados$idade)
hist(dados$idade,main="Histograma da idade",xlab="idade",
ylab="Frequ^
encia absoluta",col="yellow",border="red")
11
Valeska Andreozzi
Gráficos no R
boxplot(idade~regiao,data=dados,col=3:5,ylab="idade")
title("Distribuiç~
ao da Idade por Regi~
ao")
pie(table(dados$regiao),main="Gráfico de setores: Regi~
ao")
Distribuição da Idade por Região
40
30
35
idade
6
4
20
0
25
2
Frequency
8
45
10
50
Histogram of dados$idade
20
25
30
35
40
45
50
capital
interior
outro
Gráfico de setores: Região
Histograma da idade
capital
6
interior
outro
0
Frequência absoluta
dados$idade
20
25
30
35
40
45
50
Com o argumento width= alteramos também a largura dos gráficos.
idade
4
Frequency
15
1
3
0
5
2
10
dados$salario
6
20
8
layout(matrix(c(1,2,3,0),ncol=2),height=c(2,1),width=c(2,1))
layout.show(3)
plot(dados$idade,dados$salario)
hist(dados$idade,main="",xlab="idade",
ylab="Frequ^
encia absoluta",col="yellow",border="red")
hist(dados$salario, main="")
20
25
30
35
40
45
50
5
15
6
dados$salario
2
0
Frequência absoluta
dados$idade
20
25
30
35
40
45
50
idade
Outra possibilidade é utilizar a função split.screen() para subdividir uma janela gráfica. Consulte o help.
10
10.1
Alteração de parâmetros gráficos
Tipo de pontos: pch
O tipo de pontos pode ser alterado através do argumento pch. Verifique o help da funções points()
para encontrar os possı́veis valores do deste argumento.
plot(dados$idade,dados$salario,xlab="idade",ylab="salário")
12
Gráficos no R
15
5
10
salário
20
Valeska Andreozzi
20
25
30
35
40
45
50
idade
15
5
10
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",pch=19)
20
25
30
35
40
45
50
idade
5
10
1:25
15
20
25
plot(1:25,pch=1:25,col=grep("red",colours())[1:25])
5
10
15
20
25
Index
10.2
Tipo de gráfico
O tipo gráfico pode ser alterado através do argumento type=
dados<-dados[order(dados$idade),]
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="l",pch=19)
13
Gráficos no R
15
5
10
salário
20
Valeska Andreozzi
20
25
30
35
40
45
50
idade
15
5
10
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="b",pch=19)
20
25
30
35
40
45
50
idade
15
5
10
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="h")
20
25
30
35
40
45
50
idade
Para maiores detalhes veja o help da função plot().
10.3
Largura da linha
O argumento lwd= altera a largura da linha.
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="l",lwd=2)
14
Gráficos no R
15
5
10
salário
20
Valeska Andreozzi
20
25
30
35
40
45
50
idade
10.4
Tipo da linha
O tipo da linha é alterado através do argumento lty=
15
5
10
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="l",lty=2)
20
25
30
35
40
45
50
idade
10.5
Eixos
Para alterar o tamanho dos labels dos eixos utilize o argumento cex.axis=.
15
5
10
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="l",lty=2,cex.axis=2)
20
25
30
35
40
45
50
idade
Para alterar o tamanho dos nomes dos eixos utilize o argumento cex.lab.
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="l",lty=2,cex.lab=2)
15
Gráficos no R
15
5
10
salário
20
Valeska Andreozzi
20
25
30
35
40
45
50
idade
11
Ajuda
?plot
?plot.default
?par
12
Exercı́cio
Faça um gráfico com linhas (pontilhada em vermelho) e pontos (quadrado) da idade versus salário
com labels dos eixos em azul e tı́tulo rosa. Utilize o help da função par para encontar os argumentos
necessários para fazer tais alterações.
13
Gráficos condicionais
15
10
5
salário
20
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",pch=19)
cond<-which(dados$idade>35 & dados$idade>15)
points(dados$idade[cond],dados$salario[cond],pch=19,col="red")
20
25
30
35
40
45
50
idade
plot(dados$idade,dados$salario,xlab="idade",ylab="salário",type="n")
cond<-which(dados$civil=="casado")
16
Valeska Andreozzi
Gráficos no R
5
10
salário
15
20
points(dados$idade[cond],dados$salario[cond],pch=19,col="red")
cond<-which(dados$civil=="solteiro")
points(dados$idade[cond],dados$salario[cond],pch=19,col="blue")
20
25
30
35
40
45
50
idade
Outro exemplo de gráfico condicional
coplot(salario ~ idade | civil, data = dados,pch=21,bg="green")
Given : civil
casado
solteiro
25
30
35
40
45
50
15
5
10
salario
20
20
20
25
30
35
40
45
50
idade
Gráfico condicional usando a função pairs()
?iris
head(iris)
str(iris)
pairs(iris[1:4])
3.0
4.0
0.5
1.5
2.5
6.5
7.5
2.0
4.0
4.5
5.5
Sepal.Length
5
6
7
2.0
3.0
Sepal.Width
1.5
2.5
1
2
3
4
Petal.Length
0.5
Petal.Width
4.5
5.5
6.5
7.5
1
2
3
4
5
6
7
table(iris$Species)
cores<-rep(c("red", "green3", "blue"),each=50)
17
Valeska Andreozzi
Gráficos no R
cores
pairs(iris[1:4], main = "Anderson’s Iris Data -- 3 species", pch = 21, bg = cores)
Anderson’s Iris Data −− 3 species
3.0
4.0
0.5
1.5
2.5
6.5
7.5
2.0
4.0
4.5
5.5
Sepal.Length
1 2 3 4 5 6 7
2.0
3.0
Sepal.Width
1.5
2.5
Petal.Length
0.5
Petal.Width
4.5
5.5
6.5
7.5
14
1
2
3
4
5
6
7
Mais um gráfico interessante
library(car)
scatterplot(salario~idade|instrucao,data=dados)
instrucao
15
5
10
salario
20
1oGrau
2oGrau
Superior
20
25
30
35
40
45
50
idade
14.1
Gráfico para série temporal
Para criar um objeto do tipo série temporal, utilize a função ts()
doutor<-read.table("pordata_doutoramentos.csv",header=T,sep=",")
total<-ts(doutor$total, start = 1970, end = 2008, frequency = 1)
Gráfico da série temporal
plot.ts(total)
18
Gráficos no R
50
100
total
150
200
Valeska Andreozzi
1970
1980
1990
2000
Time
Podemos criar uma série multivariada e automaticamente fazer o gráfico de todas as séries
multi<-ts(doutor[,-1], start = 1970, end = 2008, frequency = 1)
plot(multi,main="Doutoramentos por paı́s")
franca
30
8
4
italia
8
0
4
holanda
6
4
2
6
4
uk
outros
0
10
30
20
60
0
2
25
15
80
40
0
espanha
5
eua
35 0
brasil
80
belgica
8
0
10
150
50
total
Doutoramentos por país
1970
1980
1990
Time
2000
1970
1980
1990
2000
Time
plot(multi,main="Doutoramentos por paı́s",yax.flip = TRUE,xlab="Ano")
14.2
Exercı́cio
Faça um gráfico para ilustrar os dados do Pordata sobre alunos matriculados: por nı́vel de ensino e
sexo em Portugal. Os dados estão no ficheiro pordatanumeroalunos.csv
15
Gráficos multivariados
Exemplos de dados longitudinais
d2<-read.table("seizure.dat",header=T)
names(d2)
head(d2)
linhas<- d2$id %in% 104
linhas
plot(d2$visit[linhas],d2$counts[linhas],type="l",xlab="Visita",
ylab="Episódios de Epilepsia")
19
Valeska Andreozzi
Gráficos no R
8
6
4
Episódios de Epilepsia
10
linhas<- d2$id %in% 106
linhas
lines(d2$visit[linhas],d2$counts[linhas])
#quantos indivı́duos tem
length(unique(d2$id))
0
1
2
3
4
Visita
100
50
0
Episódios de Epilepsia
150
linhas<- d2$id %in% 104
limitey<-range(d2$counts)
plot(d2$visit[linhas],d2$counts[linhas],type="l",xlab="Visita",
ylab="Episódios de Epilepsia",ylim=limitey)
id<-unique(d2$id)
for (i in 2:59){
linhas<- d2$id %in% id[i]
lines(d2$visit[linhas],d2$counts[linhas])
}
0
1
2
3
4
Visita
Mesmo gráfico agora usando a função matplot()
x<-0:4
y<-matrix(d2$counts,nrow=5,byrow=F)
x
y
matplot(x,y,type="l")
20
Gráficos no R
0
50
y
100
150
Valeska Andreozzi
0
1
2
3
4
x
15.1
Exercı́cio
No gráfico anterior,
1. altere os labels dos eixos
2. insira um tı́tulo
3. insira o texto “outlier” onde houver um observação outlier.
4. grave o gráfico no formato wmf
16
Gravando um gráfico em arquivo
Quando estiver na janela gráfica, pode-se usar o menu File>Save as para salvar um gráfico em
diferentes formatos.
Outra possibilidade é usar as funções especı́ficas para guardar gráficos, como por exemplo jpeg(),
win.metafile() e postscript().
jpeg("meugrafico2.jpeg",quality=100)
scatterplot(salario~idade|instrucao,data=dados,smooth=F)
dev.off()
win.metafile("meugrafico3.wmf")
scatterplot(salario~idade|instrucao,data=dados,smooth=F)
title("Salário vs Idade")
dev.off()
17
Gráficos mais especializados
A biblioteca lattice oferece uma gama de gráficos multivariados mais especializados, mas que fica
fora do escopo deste curso. Para os interessados uma referência está em:
http://lmdvr.r-forge.r-project.org/figures/figures.html
21
Download

Gráficos no - curso-R