[[bot89:precurso:3plot:inicio]]

Parâmetros Gráficos dos Dispositivos

Para fazer boas figuras no R, você precisa muitas vezes controlar parâmetros gráficos dos dispositivos, como margem da figura, tamanho de fonte, tipo da fonte, distância das legendas dos eixos x e y, se essas legendas são horizontais ou verticais, o tipo símbolos dos pontos, as cores dos simbolos, etc.

  • Você pode definir esses parâmetros diretamente nas funções gráficas de alto-nível <highlevel plot> (…, <tag> = <value>), onde um valor (value) de um parâmetro (tag) pode ser adicionado diretamente como argumento de uma função de alto-nível.
  • Alguns desses parâmetros, no entanto, só podem ser definidos através da função par( ), que também define parâmetros gráficos globais, i.e. alterando os parâmetros através dessa função você altera para todos os gráficos que estiver realizando durante uma sessão do R.
  • A função par() também permite visualizar os parâmetros gráficos.
  • Leia atentamente o help da função par():


  • Você pode salvar os parâmetros globais antes de alterá-los.
?par #veja o help dessa função
 
#você pode ver os parâmetros padrão:
par() #vejo todos os parâmetros
op = par() #pego todos os parâmetros
class(op) #isso é uma lista
names(op) #esses são os nomes dos parâmetros
 
#a função par permite ver os valores atualmente definidos
par("family")  #tipo de fonte nao tem 
par("mar") #margens da figura em número de linhas
 
 
#a função para tem apenas 1 argumento além dos parâmetros gráficos
op2 <- par(no.readonly = TRUE)
class(op2)
#a diferença entre especificar no.readonly como verdadeiro (na primeria opção não especificada acima, o padrão é FALSE) 
#é que a lista gerada pode ser usada para refazer alterações, ou seja, para resgatar os parâmetros gráficos padrão.
 
#ou seja, posso fazer:
par(op2) #para resgatar valores originais
 
#mas não posso fazer o mesmo com a primeira opção
par(op) #porque op é uma lista diferente
 
length(op)==length(op2) #tem comprimentos diferentes
identical(op,op2) #nao são identicas
#Usando novamente o exemplo de iris
Sepalas = iris$Sepal.Length
Petalas = iris$Petal.Length
#especies como números
spp = as.numeric(as.factor(iris$Species))
#uma cor para cada espécie
vcl = c("yellow",'green','blue')[spp] 
#um simbolo para cada espécie
sbs = c(21,22,23)[spp]
 
#plota a figura no dispositivo padrão
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#ALTERANDO A MARGEM em NUMEROS DE LINHAS
#salva o valor padrao para resgatar ao final
op = par(no.readonly = TRUE)
op$mar #esses são os valor atuais para Margem Inferior, Esquerda, Superior e Direita, respectivamente. #quando se referir a margem todos os parâmetros seguem a ordem ANTI-HORÁRIA iniciando na margem inferior
#reduzindo as margem direita e superior em número de linhas
par(mar=c(5,4,1,0.5))
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#voltando ao original
par(mar=op$mar)
op = par(no.readonly = TRUE)
 
 
#POSICAO DAS LEGENDAS DOS EIXOS
par("mgp" #três valores que correspondem ao número de linhas para: (1) Titulo dos Eixos; (2) valores dos eixos; (3) linha dos eixos
 
#TAMANHO DE FONTE DOS EIXOS É RELATIVO AO VALOR DE FONTE PADRÃO
par("cex") #tamanho padrão
par("cex.lab") #número que multiplicado por op$cex indica o valor da fonte dos títulos dos eixos
par("cex.axis") #dos valores
 
 
#TAMANHO DAS BARRAS DE CADA VALOR
par("tck") #geralmente não tem padrão definido pois é extraído de outros valores automaticamente, mas você pode controlar isso
 
#DIMINUINDO A FONTE DISSO 
par(cex.lab=0.8,cex.axis=0.7)
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#note que isso muda se eu alterar o tamanho de fonte padrão par(cex)
par(cex=2, cex.lab=0.8,cex.axis=0.7)
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#APROXIMANDO
par(mgp=c(1.5,0.5,0))
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#e agora
par(tck=-0.01) #note o valor negativo
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
par(tck=0.01) #se colocar positivo
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
par(op) #restaurando valores originais
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
op = par(no.readonly = TRUE)
 
par("pty") #valor "m" maximiza a area disponível  
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#agora mantendo a proporção dos eixos (sem esticar nenhum dos dois)
par(pty='s')
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#se não notou diferença, expandir o dispositivo onde está desenhando a figura

Você pode colocar diferentes gráficos na mesma tela ou na mesma página de um pdf, por exemplo. Temos duas formas de fazer isso:

  • Os parâmetros mfrow e mfcol dividem os dispositivo em células de tamanhos idênticos. Todas as figuras terão o mesmo tamanho. A diferença entre os dois parâmetros é que mfrow preenche o espaço por linhas, enquanto mfcol preenche o espaço pelas colunas.
par(op)
par("mfrow") #o dispositivo não está divido: tem 1 linha e 1 coluna
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#EXEMPLO 1
#duas figuras no mesmo dispositivo
par(mfrow=c(1,2)) #dividir o dispositivo em 1 linha e duas colunas
#plota a primeira figura
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
#plota a segunda sem cores
plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
 
#EXEMPLO 2
par(mar=c(5.1,4.1,2.1,2.1))
par(mfrow=c(2,2)) #dividir o dispositivo em 2 linha e duas colunas
#plota quatro figuras identificas
for(f in 1:4) {
  plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
  #adiciona uma letra para você ver a ordem e comparar com o exemplo 3
  mtext(LETTERS[f],side=3,line=0,adj=0, font=2,col='red') #esta é uma função de baixo nível que falaremos depois
}
 
#EXEMPLO 3
par(mfcol=c(2,2)) #mesma coisa mas preenchendo por colunas (compare com a figura acima)
for(f in 1:4) {
  plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
  mtext(LETTERS[f],side=3,line=0,adj=0, font=2,col='red')
}
 
#colocando exemplo 2 e 3 num pdf
pdf(file='meuPDFmfrow.pdf',paper="a4")
#EXEMPLO 2 expandido
par(mfrow=c(3,2)) #tres linhas e duas colunas
for(f in 1:6) {
  plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
  mtext(LETTERS[f],side=3,line=0,adj=0, font=2,col='red')
}
#EXEMPLO 3 expandido
par(mfcol=c(3,2)) 
for(f in 1:6) {
  plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
  mtext(LETTERS[f],side=3,line=0,adj=0, font=2,col='red')
}
dev.off()

A função layout() - também permite dividir um dispositivo para múltiplas figuras, mas de uma forma muito mais complexa.

?layout #veja o help dessa função
 
#voce precisa definir uma matriz que indica:
#1) o numero de figuras (valores da matriz)
#2) a posição das figuras (numero de linhas e colunas)
#por exemplo, suponha que queremos plotar 3 figuras:
#1 preenchendo a largura da página e metade da altura
#2 outras figuras preenchendo a outra metada da altura
#neste caso a figura 1 ira ocupar dois espacos
mm = matrix(c(1,1,2,3),nrow=2,ncol=2, byrow = T)
mm #a figura 1 irá ocupar a posicao do numero 1 na matriz
#a figura 2 irá ocupar a posicao do numero 2 nessa matriz
#a figura 3 irá ocupar a posicao do numero 3 dessa matriz
#a largura de cada coluna e linha é especificada pelos argumentos widths e heights e usaremos a função lcm() para especificar isso em centímetros
#divide o dispositivo
ml = layout(mm,widths=rep(lcm(5),ncol(mm)),heights=rep(lcm(5),nrow(mm)))
#mostra a divisao feita
layout.show(ml)
 
#plota a primeira figura
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
#a segunda
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
#a terceira
plot(Sepalas,Petalas,pch=sbs,bg=vcl,cex=0.8)
 
#colocando isso num pdf
pdf(file='meuPDFlayout.pdf',paper="letter")
layout(mm,widths=rep(lcm(8),ncol(mm)),heights=rep(lcm(8),nrow(mm)))
#plota as tres figuras fazendo uma iteracao
for(f in 1:3) { 
  plot(Sepalas,Petalas,pch=sbs,bg=NULL,cex=0.8)
  mtext(LETTERS[f],side=3,line=0,adj=0, font=2,col='red')
}
dev.off() #fecha o pdf
  • bot89/precurso/3plot/inicio.txt
  • Última modificação: 13/39/2020 10:39
  • por labotam_admin