Box Plot em Python usando Matplotlib
Um Box Plot também é conhecido como gráfico Whisker é criado para exibir o resumo do conjunto de valores de dados com propriedades como mínimo, primeiro quartil, mediano, terceiro quartil e máximo. No gráfico de caixa, uma caixa é criada do primeiro quartil ao terceiro quartil, uma linha vertical também está lá que passa pela caixa na mediana. Aqui, o eixo x denota os dados a serem plotados enquanto o eixo y mostra a distribuição de frequência.
Criando Box Plot
O matplotlib.pyplot
módulo da biblioteca matplotlib fornece boxplot()
funções com a ajuda da qual podemos criar gráficos de caixa.
Sintaxe:
matplotlib.pyplot.boxplot (data, notch = None, vert = None, patch_artist = None, widths = None)
Parâmetros:
Atributo | Valor |
---|---|
dados | matriz ou sequência da matriz a ser traçada |
entalhe | parâmetro opcional aceita valores booleanos |
vert | parâmetro opcional aceita valores booleanos falso e verdadeiro para gráfico horizontal e vertical, respectivamente |
bootstrap | parâmetro opcional aceita int especifica intervalos em torno de boxplots entalhados |
usermedians | parâmetro opcional aceita matriz ou sequência de dimensão de matriz compatível com dados |
posições | parâmetro opcional aceita array e define a posição das caixas |
larguras | parâmetro opcional aceita array e define a largura das caixas |
patch_artist | parâmetro opcional com valores booleanos |
rótulos | sequência de strings define rótulo para cada conjunto de dados |
linha média | optinal tendo valor booleano tente renderizar a linha média como largura total da caixa |
zorder | parâmetro opcional define o zorder do boxplot |
Os valores de dados dados ao ax.boxplot()
método podem ser uma matriz Numpy ou uma lista Python ou uma Tupla de matrizes. Vamos criar o gráfico de caixa usando numpy.random.normal()
para criar alguns dados aleatórios, ele leva a média, o desvio padrão e o número desejado de valores como argumentos.
Exemplo:
import
matplotlib.pyplot as plt
import
numpy as np
np.random.seed(
10
)
data
=
np.random.normal(
100
,
20
,
200
)
fig
=
plt.figure(figsize
=
(
10
,
7
))
plt.boxplot(data)
plt.show()
Resultado:
Personalização do Box Plot
O matplotlib.pyplot.boxplot()
oferece infinitas possibilidades de personalização para o box plot. O notch = True
atributo cria o formato de entalhe para o box plot, patch_artist = True
preenche o boxplot com cores, podemos definir cores diferentes para diferentes vert = 0
caixas. O atributo cria boxplot horizontal. labels
tem as mesmas dimensões que os conjuntos de dados numéricos.
Exemplo 1:
import
matplotlib.pyplot as plt
import
numpy as np
np.random.seed(
10
)
data_1
=
np.random.normal(
100
,
10
,
200
)
data_2
=
np.random.normal(
90
,
20
,
200
)
data_3
=
np.random.normal(
80
,
30
,
200
)
data_4
=
np.random.normal(
70
,
40
,
200
)
data
=
[data_1, data_2, data_3, data_4]
fig
=
plt.figure(figsize
=
(
10
,
7
))
ax
=
fig.add_axes([
0
,
0
,
1
,
1
])
bp
=
ax.boxplot(data)
plt.show()
Resultado:
Exemplo 2: vamos tentar modificar o gráfico acima com algumas das personalizações:
import
matplotlib.pyplot as plt
import
numpy as np
np.random.seed(
10
)
data_1
=
np.random.normal(
100
,
10
,
200
)
data_2
=
np.random.normal(
90
,
20
,
200
)
data_3
=
np.random.normal(
80
,
30
,
200
)
data_4
=
np.random.normal(
70
,
40
,
200
)
data
=
[data_1, data_2, data_3, data_4]
fig
=
plt.figure(figsize
=
(
10
,
7
))
ax
=
fig.add_subplot(
111
)
bp
=
ax.boxplot(data, patch_artist
=
True
,
notch
=
'True'
, vert
=
0
)
colors
=
[
'#0000FF'
,
'#00FF00'
,
'#FFFF00'
,
'#FF00FF'
]
for
patch, color
in
zip
(bp[
'boxes'
], colors):
patch.set_facecolor(color)
for
whisker
in
bp[
'whiskers'
]:
whisker.
set
(color
=
'#8B008B'
,
linewidth
=
1.5
,
linestyle
=
":"
)
for
cap
in
bp[
'caps'
]:
cap.
set
(color
=
'#8B008B'
,
linewidth
=
2
)
for
median
in
bp[
'medians'
]:
median.
set
(color
=
'red'
,
linewidth
=
3
)
for
flier
in
bp[
'fliers'
]:
flier.
set
(marker
=
'D'
,
color
=
'#e7298a'
,
alpha
=
0.5
)
ax.set_yticklabels([
'data_1'
,
'data_2'
,
'data_3'
,
'data_4'
])
plt.title(
"Customized box plot"
)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
plt.show(bp)
Resultado:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva