[[bot89:precurso:4plot:inicio]]

Parâmetros Gráficos II - Símbolos & Cores

  • Você pode fazer o que quiser na produção de um gráfico no R.
  • Isso requer conhecer bem os parâmetros gráficos, que já apresentamos de forma geral anteriormente.
  • Aqui apresentamos alguns parâmetros de uso comum pelas funções gráficas de alto e baixo nível, que definem símbolos e cores. Você viu isso se leu o help e entendeu o que função par() faz.
  • Em gráficos de dispersão e ou na necessidade de colocar qualquer símbolo num gráfico qualquer precisamos saber como definir símbolos, suas cores e seus tamanhos. Os parâmetros gráficos que fazem isso, são principalmente os seguintes:
    • pch - define o tipo de símbolo para pontos
    • lty - define o tipo de símbolo para linhas
    • col e bg - define a cor de linhas e recheio, respectivamente de símbolos, gráficos, polígonos, etc.
    • cex - define o tamanho de símbolos e texto
    • lwd - espessura das linhas
  • Nós queremos símbolos, em geral, para colocar num gráfico os pontos referentes às nossas unidades amostrais. Portanto, esse tipo de símbolo no R é chamado de points, e já vimos a função de baixo-nível points(), que depende desse argumento ou parâmetro.
  • pch pode ser um número (0:25), que especifica um símbolo, ou símbolos de um único caractere [e.g. c("A", "*","&", "?")].
#veja o definido como parâmetro global
par("pch")
 
#o que isso quer dizer?
#vamos usar a função example()
?example #se quiser saber o que isso faz
#quando digitar o comando abaixo, 
#vai precisar RESPONDER NO CONSOLE para prosseguir.
example("points")
#pare na terceira figura que esse exemplo gera.
par("pch") #este valor corresponde ao símbolo nessa figura.
#note que os símbolos de 21:25 permitem definir cor de linha e de recheiro, os demais apenas uma única cor
 
#vamos gerar alguns exemplos com os dados de iris
class(iris)
dim(iris)
colnames(iris)
#com a definicao padrão de pch
par("pch")
Sepalas = iris$Sepal.Length
Petalas = iris$Petal.Length
plot(Sepalas, Petalas)
 
#colocando todas com um único símbolo diferente
plot(Sepalas, Petalas,pch=25)
 
#colocando cada espécie com um único símbolo
#neste caso o argumento pch deve ter um vetor do número de linhas em iris, se for menor, pela regra da reciclagem, ele irá repetir os símbolo sem estar relacionado à coluna Species, que define qual linha é de qual espécie.
#então se eu definir apenas três simbolos, um para cada espécie:
plot(Sepalas, Petalas,pch=c("A","&","+"))
#eles vao aparecer misturados, isso não está de acordo com as espécies
#uma forma rápida de fazer isso, tendo em vista que o pch pode ser um valor numérico, 
#é transformar o nome das minhas especies em números. 
#Eu posso fazer isso se convertendo um fator para número, pois nele as categorias estão explicitamente definidas
spp = iris$Species
class(spp) #já é um fator
#note que isso gera muitos NAs, já vimos isso antes
as.numeric(as.vector(spp)) 
#mas isso gera números por spp é um fator
as.numeric(spp)
#então se eu quero os símbolos 22,23,25 para representar minhas espécies, eu uso esses números para pegar esses valores pelos índices de um vetor:
pch.das.spp = c(21,23,25)[as.numeric(spp)]
pch.das.spp
#posso usar isso como argumento em plot:
plot(Sepalas, Petalas,pch=pch.das.spp)
#pronto cada espécie é um símbolo diferente
  • cex é um argumento genérico para especificar tamanho dos pontos, relativo ao padrão do dispositivo. Aceita um valor numérico que é multiplicado pelo valor do seu dispositivo. O padrão geral é 1, 100 porcento do tamanho. Se colocar 0.5 terá 50%, se colocar 1.5 terás 150% do tamanho padrão.
#da etapa anterior
pch.das.spp = c(21,23,25)[as.numeric(spp)]
#temos nosso gráfico com símbolos
plot(Sepalas, Petalas,pch=pch.das.spp)
 
#mudando o tamanho de todos os simbolos
plot(Sepalas, Petalas,pch=pch.das.spp,cex=0.5)
 
#para maior
plot(Sepalas, Petalas,pch=pch.das.spp,cex=1.5)
 
#um tamanho diferente por ponto (especie)
tm = c(0.5,1,1.5)[as.numeric(spp)]
tm
plot(Sepalas, Petalas,pch=pch.das.spp,cex=tm)
  • lwd e lty controlam a espessura e o tipo das linhas
data("AirPassengers") #veja esse conjunto de dados com ?datasets
class(AirPassengers)
plot(AirPassengers,ylab="Número de Passageiros") 
#mudando o tipo de linha
plot(AirPassengers,ylab="Número de Passageiros",lty='dotted') 
#outro tipo
plot(AirPassengers,ylab="Número de Passageiros",lty='dotdash') 
#mudando a cor e espessura
plot(AirPassengers,ylab="Número de Passageiros",lty='dashed',col='red',lwd=2) 
  • col define cores para os símbolos. No caso de símbolos de uma única cor precisa usar apenas este argumento
  • bg define as cores do preenchimento dos símbolos
#o que definimos antes são símbolos que permitem definir cores para preenchimento e linha:
pch.das.spp = c(21,23,25)[as.numeric(spp)]
#temos nosso gráfico com símbolos
plot(Sepalas, Petalas,pch=pch.das.spp)
 
#vamos adicionar as cores seguindo o mesmo raciocínio
cores.spp = c("red","blue","yellow")[as.numeric(spp)]
cores.spp
plot(Sepalas, Petalas,pch=pch.das.spp,bg=cores.spp)
#podemos mudar a cor da linha desses simbolos (todos para verde pela regra da reciclagem especifico uma única vez)
plot(Sepalas, Petalas,pch=pch.das.spp,bg=cores.spp, col="green")
 
#mudando simbolos
nsb = c("*","#","+")[as.numeric(spp)]
plot(Sepalas, Petalas,pch=nsb,bg=cores.spp)
#note que apesar de bg estar especificando cores as cores nao foram adicionadas, porque colocamos no argumento de preenchimento. 
#Mudando:
plot(Sepalas, Petalas,pch=nsb,col=cores.spp)
  • Cores podem ser definidas por palavras ou por códigos.
  • colors() ou colours() - lista cores pelo nome.
#lista todas as cores disponíveis pelo nome
colors()
#nossa tem 657 cores. Difícil, né?
#reduz para as mais distintas
colors(distinct = TRUE)
#ainda 502 
#eu posso pegar ou buscar por cores
ascores = colors(distinct = TRUE)
vl = grep("blue",ascores)
ascores[vl]
#60 nomes que contém a palavra azul
 
#vamos ver todas as cores num pdf longo
#vamos plotar pizzas coloridas com 10 cores cada
#4 pizzas por página
 
?pie #veja o help dessa função
 
#abre um PDF
pdf("cores.pdf",width=lcm(29),height = lcm(21))
 
#vamos dividir o dispositivo em 2 colunas e 3 linhas (e diminuir a margem)
par(mfrow=c(2,2), mar=c(3,3,3,3),cex=0.7)
ln = length(ascores)
ln #sao 502 cores
ceiling(ln/10) #, entao serao 51 pizzas
 
#plota cada pizza fazendo uma iteração:
idx = 0 #o objeto nullo para usar de indice na iteracao para fazer de 10 em 10
for(p in 1:ceiling(ln/10)) {
  de = idx+1 #cor do indice idx
  ate = idx+10 #ate cor do indice idx+10
  cls = ascores[de:ate] #cores da pizza da iteracao p
  pie(rep(1,10),col=cls, labels= cls)
  idx = ate
}
dev.off() #fecha o pdf
  • rainbow() ou terrain.colors() - gera gradientes de cores num padrão definido.
#10 cores do arco-iris
cls = rainbow(n=10)
pie(rep(1,10),col=cls, labels= cls)
 
#12 cores do arco-iris com 50% de transparencia
cls = rainbow(n=12,alpha=0.5)
pie(rep(1,12),col=cls, labels= cls)
 
#12 cores do arco-iris, limitando o espectro
cls = rainbow(n=12,start=0.1,end=0.9)
pie(rep(1,12),col=cls, labels= cls)
 
 
#10 cores quentes
cls = heat.colors(n=10, alpha = 1)
pie(rep(1,10),col=cls, labels= cls)
 
#20 cores topográficas
cls = topo.colors(n=20, alpha = 1)
pie(rep(1,20),col=cls, labels= cls)
#ou melhor
cls = terrain.colors(n=20, alpha = 1)
pie(rep(1,20),col=cls, labels= cls)
  • rgb() ou hsv() - gera qualquer tipo de cor
?rgb #veja o help dessa funcao e veja as funcoes sob See Also
 
#podemos entender melhor fazendo o caminho inverso
defs = col2rgb("yellow") #extraimos as especificacoes de amarelo (cores primárias ) pela palavra
defs
 
#sem cor temos preto
cls = rgb(red=0, green=0, blue=0) #fazemos amarelo
pie(1,col=cls,labels=cls)
 
#fazemos amarelo
cls = rgb(red=255, green=255, blue=0,maxColorValue=255) 
pie(1,col=cls,labels = cls)
 
#tiramos verde
cls = rgb(red=255, green=160, blue=0,maxColorValue=255) 
pie(1,col=cls,labels = cls)
 
#tiramos verde e adicionamos azul
cls = rgb(red=255, green=160, blue=255,maxColorValue=255) 
pie(1,col=cls,labels = cls)
 
#tiramos azul-escuro (mais perto de 0)
cls = rgb(red=0, green=0, blue=150,maxColorValue=255) 
pie(1,col=cls,labels = cls)
 
#tiramos azul
cls = rgb(red=0, green=0, blue=255,maxColorValue=255) 
pie(1,col=cls,labels = cls)
  • bot89/precurso/4plot/inicio.txt
  • Última modificação: 13/53/2020 11:53
  • por labotam_admin