R Box Plot
Neste artigo, você aprenderá a criar whisker e box plot na programação R. Você também aprenderá a desenhar múltiplos gráficos de caixas em um único gráfico.
Em R, o boxplot (e o gráfico de whisker) é criado usando a função boxplot()
function.
A função boxplot()
assume qualquer número de vetores numéricos, desenhando um boxplot para cada vetor.
Você também pode passar em uma lista (ou quadro de dados) com vetores numéricos como seus componentes. Vamos usar o conjunto de dados incorporado airquality
que tem “Daily air quality measurements in New York, May to September 1973” -R documentation.
> str(airquality)'data.frame':153 obs. of 6 variables:$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...$ Month : int 5 5 5 5 5 5 5 5 5 5 ...$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
Deixe-nos fazer um boxplot para as leituras de ozono.
boxplot(airquality$Ozone)
Podemos ver que os dados acima da mediana estão mais dispersos. Também podemos notar dois outliers no extremo superior.
Podemos passar em parâmetros adicionais para controlar a aparência do nosso gráfico. Você pode ler sobre eles na seção de ajuda ?boxplot
.
Alguns dos mais utilizados são, main
para dar o título, xlab
e ylab
para fornecer etiquetas para os eixos, col
para definir a cor, etc.
Adicionalmente, com o argumento horizontal = TRUE
podemos plotá-lo horizontalmente e com notch = TRUE
podemos adicionar um entalhe na caixa.
boxplot(airquality$Ozone,main = "Mean ozone in parts per billion at Roosevelt Island",xlab = "Parts Per Billion",ylab = "Ozone",col = "orange",border = "brown",horizontal = TRUE,notch = TRUE)
Valor de retorno da boxplot()
A função boxplot()
retorna uma lista com 6 componentes mostrados como se segue.
> b <- boxplot(airquality$Ozone)> b$stats 1.0 18.0 31.5 63.5 122.0attr(,"class")1 "integer" $n 116$conf 24.82518 38.17482$out 135 168$group 1 1$names "1"
Como podemos ver acima, é retornada uma lista que tem stats
–tendo a posição dos extremos superior/inferior dos bigodes e caixa junto com a mediana,
-
n
– o número de observações com que o boxplot é desenhado (note queNA
‘s não são levados em conta) -
conf
-superior/inferior dos extremos do entalhe,out
valor dos outliers -
group
um vector do mesmo comprimento do outliers cujos elementos indicam a que grupo o outliers pertence e -
names
um vector de nomes para os grupos.
Multiple Boxploplots
Podemos desenhar múltiplos boxplots num único gráfico, passando numa lista, quadro de dados ou múltiplos vectores.
Deixe-nos considerar o campo Ozone
e Temp
de airquality
conjunto de dados. Vamos também gerar uma distribuição normal com a mesma média e desvio padrão e plotá-los lado a lado para comparação.
# prepare the dataozone <- airquality$Ozonetemp <- airquality$Temp# gererate normal distribution with same mean and sdozone_norm <- rnorm(200,mean=mean(ozone, na.rm=TRUE), sd=sd(ozone, na.rm=TRUE))temp_norm <- rnorm(200,mean=mean(temp, na.rm=TRUE), sd=sd(temp, na.rm=TRUE))
Agora nós fazemos 4 boxplots com estes dados. Usamos os argumentos at
e names
para denotar o local e etiqueta.
boxplot(ozone, ozone_norm, temp, temp_norm,main = "Multiple boxplots for comparision",at = c(1,2,4,5),names = c("ozone", "normal", "temp", "normal"),las = 2,col = c("orange","red"),border = "brown",horizontal = TRUE,notch = TRUE)
Fórmula Boxplot
A função boxplot()
também pode tomar em fórmulas da forma y~x
onde, y
é um vetor numérico que é agrupado de acordo com o valor de x
.
Por exemplo, no nosso conjunto de dados airquality
, o Temp
pode ser o nosso vector numérico. O mês pode ser a nossa variável de agrupamento, de modo a obtermos o boxplot para cada mês separadamente. Em nosso conjunto de dados, o mês está na forma de número (1=Janeiro, 2-Febuário e assim por diante).
boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")
É claro a partir da figura acima que o mês número 7 (Julho) é relativamente mais quente que o resto.