Cap 2 Gráfico de Barras

Para que serve: O gráfico de barras é uma maneira de resumir a informação de uma variável qualitativa/categórica.

Uma variável é chamada qualitativa, também conhecida como categórica, se seus valores pertencem a uma coleção de classes não superpostas. Exemplos comuns incluem notas de letra de estudante (A, B, C, D ou F), classificação de algo (Baixo, médio ou alto), Sexo (Feminino ou Masculino).

Há vantagem do uso do gráfico de barras sobre o gráfico de pizza quando temos variáveis ordinais ou quando há muitas categorias de análise.

data(mtcars)
mtcars <- within(mtcars, {
  am <- factor(am, labels=c('Automático','Manual'))
})
mtcars <- within(mtcars, {
  vs <- factor(vs, labels=c('Não','Sim'))
})
par(bg="#fdf6e3") 

contagem = table(mtcars$am)
nomes = levels(mtcars$am)
porcent = round(prop.table(contagem)*100,2)
rotulo=paste(nomes," (",porcent,"%",")",sep="")
barras<-barplot(table(mtcars$am), ylab="Frequência", main="Tipo de marcha", col=c("red","blue"))
text(barras, 0, rotulo,cex=1,pos=3,col ="#ffffff")

contagem2 = table(mtcars$vs)
nomes2 = levels(mtcars$vs)
porcent2 = round(prop.table(contagem2)*100,2)
rotulo2=paste(nomes2," (",porcent2,"%",")",sep="")
barras2<-barplot(table(mtcars$vs), ylab="Frequência", main="Tipo", col=c("#003154","#dd4a37"))
text(barras2, 0, rotulo,cex=1,pos=3,col ="#ffffff")

par(bg="#fdf6e3") 
library(plotrix)
barpos<-barplot(contagem,main="Gráfico de Barras",col=c("red","blue"))
barlabels(barpos,contagem,col=c("red","blue"))

barpos2<-barplot(contagem2,main="Gráfico de Barras", col=c("#003154","#dd4a37"))
barlabels(barpos2,contagem2,cex=1.3,prop=0.1, col=c("#003154","#dd4a37"))

2.1 Gráficos de Barras “GAP”

library(RColorBrewer)
par(bg="#fdf6e3") 
#display.brewer.all()
COR<-brewer.pal(4,"Dark2")
#COR

library(plotrix)
twogrp<-c(rnorm(10)+4,rnorm(10)+20)
 gap.barplot(twogrp,gap=c(8,16),xlab="Index",ytics=c(3,6,17,20),
  ylab="Group values",main="Gráfico de Barras com um'GAP'")

gap.barplot(twogrp,gap=c(8,16),xlab="Index",ytics=c(3,6,17,20),
  ylab="Valores",horiz=TRUE,main="Gráfico de Barras com um'GAP'")

2.2 Barras no ggplot2

library(ggplot2)
ggplot(data=mtcars, aes(x=am)) +
  geom_bar(stat="count", fill="steelblue")+
  theme_minimal()

#install.packages('RCurl')
library(RCurl)
## Carregando pacotes exigidos: bitops
#X <- read.csv(url("http://some.where.net/data/foo.csv"))
x <- getURL("https://raw.githubusercontent.com/DATAUNIRIO/Base_de_dados/master/Estados.csv")
BaseUF <- read.csv(text=x, header=T, quote="", sep=";",dec = ",")
ggplot(data=BaseUF, aes(x=Regiao_Geografica)) +
  geom_bar(stat="count", fill=c("#10c6d3","#0ea5af","#0b8b93","#096c72","#064144"))+
  theme_minimal()

2.3 Rótulos das Barras no ggplot2

dados = data.frame(round(prop.table(contagem)*100,2))
dados <- within(dados, {
  Var1 <- factor(Var1, labels=c('Automático','Manual'))
})
attach(dados)
dados <- dados[order(Freq),] 
detach(dados)

# Fora das Barras
ggplot(data=dados, aes(x=Var1, y=Freq)) +
  geom_bar(stat="identity", fill="steelblue")+
  geom_text(aes(label=Freq), vjust=-0.3, size=3.5)+
   ylab("Frequência") +
   xlab("Tipo") +
   theme_minimal()

# Dentro das Barras
ggplot(data=dados, aes(x=Var1, y=Freq)) +
  geom_bar(stat="identity", fill="#275b70")+
  geom_text(aes(label=Freq), vjust=1.6, color="white",size=3.5)+
  ylab("Frequência") +
  xlab("Tipo") +
  theme_minimal()

ggplot(data=BaseUF, aes(x=Regiao_Geografica)) +
  geom_bar(stat="count", fill=c("#10c6d3","#0ea5af","#0b8b93","#096c72","#064144"))+
  geom_text(stat='count',aes(label=..count..),vjust=1.6, color="white",size=3.5)+
  ylab("Frequência") +
  xlab("Região Geográfica") +
  theme_minimal()

ggplot(data=BaseUF, aes(x=Regiao_Geografica)) +
  geom_bar(stat="count", fill=c("#10c6d3","#0ea5af","#0b8b93","#096c72","#064144"))+
  geom_text(stat="count",aes(label=..count..),vjust=1.6, color="white",size=3.5)+
  ylab("Frequência") +
  xlab("Região Geográfica") +
  theme_minimal()

ggplot(data=BaseUF, aes(x=Regiao_Geografica)) +
  geom_bar(stat="count", fill=c("#10c6d3","#0ea5af","#0b8b93","#096c72","#064144"))+
geom_text(aes(label = round(prop.table(..count..)*100,2), y= ..count.. ), stat= "count", vjust=1.6, color="white",size=5.5) +
  labs(y = "Percentual", fill="Regiao_Geografica")

error <- c(9, 6)
# adding error bars
plt<-ggplot(data=dados, aes(x=Var1, y=Freq)) +
  geom_bar(stat="identity", fill="#275b70")+
  geom_text(aes(label=Freq), vjust=1.6, color="white",size=3.5)+
  ylab("Frequência") +
  xlab("Tipo") +
  theme_minimal()

plt +  geom_errorbar(aes(ymin=Freq-error, ymax=Freq+error), width=.1, position=position_dodge(.1))  

2.4 Alternativas ao Gráfico de Barras

2.5 Gráficos de pontos “Dotplot” para variáveis discretas.

Descrição. Um gráfico de pontos consiste em pontos de dados plotados em uma escala bastante simples, geralmente usando círculos preenchidos. É um tipo de gráfico utilizado na estatística para conjuntos de dados relativamente pequenos onde os valores se enquadram em uma série de barras discretas (categorias). Um gráfico de pontos é semelhante a um gráfico de barras porque a altura de cada “barra” de pontos é igual ao número de itens em uma categoria específica.

library(plotrix)  
x <- rpois(100,10)
dotplot.mtb(x,yaxis=TRUE,main="Dotplot")

2.6 Gráfico com Barras preenchidas com símbolos

Descrição. Produz um gráfico de barras onde cada unidade de ‘barra’ é preenchida com o número de símbolos igual ao tamanho da barra.

set.seed(1001)
bvals <- matrix(rpois(12,20),nrow=3)
b <- symbolbarplot(bvals)

require(ggplot2)

# function 
ruler.bar.plot <-function(gg, nn, mjtick =1, mntick = 0.2, mjtickcol = "black", mntickcol = "white"){
seq.list<-list()
for(i in 1:length(gg)){
  ystart<-seq(mntick ,gg[i],mntick )
  yend<-ystart
  xstart<-rep(i-0.45,length(ystart))
  xend<-xstart+0.1
  nam.val<-c(nn[i],rep(NA,length(ystart)-1))
  numb.val<-c(gg[i],rep(NA,length(ystart)-1))
  seq.list[[i]]<-data.frame(nam.val,numb.val,xstart,xend,ystart,yend)
}
df<-as.data.frame(do.call(rbind, seq.list))
p <- ggplot(df, aes(nam.val))
p + geom_bar(aes(y=numb.val,fill=nam.val),stat="identity",width=0.5,color=mjtickcol,lwd=1.1) +
        geom_segment(aes(x=xstart,y=ystart,xend=xend,yend=yend), color=mjtickcol) +
        ylim(c(0,max(gg)+0.5))  + scale_x_discrete(limits= nn) +
            geom_hline(yintercept=seq(mjtick,max(gg),mjtick),color=mntickcol,lwd=1.1)+   geom_text(aes (y = numb.val, label = numb.val), vjust= - 1 ) +
    guides(fill=FALSE) +
         theme_bw()+
    theme(axis.title=element_blank(),
               axis.text.y=element_blank(),
               axis.text.x=element_text(angle=90,face="bold",size=rel(1.5)),
               axis.ticks=element_blank(),
               panel.background = element_rect(fill = mntickcol),
               panel.border=element_blank(),
               panel.grid=element_blank(),
               legend.position = "none")
}

# human height in inches, ticking done at each 12
htinch <- c(66, 72, 88, 54)
id <- c("A", "B", "C", "D")
ruler.bar.plot(htinch, id, mjtick =12, mntick = 1,  mjtickcol = "black", mntickcol = "white")

VV = c(0.13, 0.33, 0.82, 0.46)
LV = c("A", "C", "L", "N")
ruler.bar.plot(VV, LV, mjtick =0.1, mntick = 0.02,  mjtickcol = "black", mntickcol = "white")

2.7 Gráfico de Barras Circular

#circular bar plot 
library(ggplot2)
#DATA
catg <- c("A", "B", "C", "D", "F", "G")
percent <- c(88, 76, 72, 69, 59, 48)
category <- paste (catg, "-", percent, "%", sep = "")
myd <-data.frame(category,percent)
# converting to factor and applying to 
#levels to set proper order of bars 
myd$category <-factor(myd$category,levels=rev(myd$category))
# plot
plt <- ggplot(myd, aes(x = category, y = percent,fill = category)) +
  geom_bar(width = 0.85, stat="identity") + 
  coord_polar(theta = "y") + 
  xlab("") +
  ylab("") +
  ylim(c(0,100)) +
  ggtitle("Gráfico circular") + 
  geom_text(data = myd, hjust = 1, size = 3, aes(x = category, y = 0, label = category)) 

plt +
  scale_fill_manual(values = c("red1","red4", "green1", "green4", "blue1", "blue4"))+ 
  theme_minimal()+
  theme(legend.position = "none", panel.grid.major = element_blank(), panel.grid.minor = element_blank(),          axis.line = element_blank(), axis.text.y = element_blank(),          axis.text.x = element_blank(), axis.ticks = element_blank())