Curso matplotlib - Gráfico de barras verticais (barras de erro)
É possível adicionar barras de erro para cada barra, o que é feito passando o parâmetro yerr
(para barras de erro no eixo y
) ou xerr
(para barras de erros no eixo x
), de forma muito semelhante ao que vimos anteriormente.
Estes dois parâmetros podem ser alterados de duas formas. A primeira, e geralmente a mais utilizada, é passando uma constante (int
ou float
) ou uma sequência de números.
Ao utilizar uma constante para todas as barras, um mesmo valor será utilizado para as barras de erro de todas as barras.
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=0.5)
plt.show()
Figura 1 - Gráfico de barras verticais com barras de erro de mesmo tamanho.
Ao utilizar uma sequência de valores (como uma list
por exemplo), cada valor dessa sequencia será utilizada para as cada barra de erro (o tamanho dessa sequência deve ser igual ao tamanho da sequência passada para o parâmetro x
).
std_y = [0.5, 0.6, 0.1, 0.2, 1]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=std_y)
plt.show()
Figura 2 - Gráfico de barras verticais com barras de erro de tamanho variado.
Observe que o tamanho da barra de erro adicionado foi exatamente o tamanho passado, tanto para cima, como para baixo do topo de cada barra. Esta é a forma mais comum de adicionar estas barras, pois na maioria das vezes elas representam o desvio padrão ou o intervalo de confiança de uma observação/medida.
A outra forma que temos é especificar qual o tamanho para cima e para baixo no topo da barra. Isto é feito passando uma sequência de duas dimensões para o yerr
, que deve conter os valores para cada barra.
Por exemplo, ao passar yerr = [[1, 1, 1, 1, 1], [2, 2, 2, 2, 2]]
, obtemos:
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=[[1, 1, 1, 1, 1], [2, 2, 2, 2, 2]])
plt.show()
Figura 3 - Gráfico de barras verticais com barras de erro com limites diferentes.
Repare que a barra acima do topo é duas vezes maior do que a barra abaixo do topo. Dessa forma, é possível personalizar as barras de erros de forma bem simples. Também é possível que estes valores variem entre cada barra. Por exemplo:
std_y = [[0.4, 0.4, 0.4, 2, 0.5],[0.1, 0.2, 0.3, 0.4, 0.1]]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=std_y)
plt.show()
Figura 4 - Gráfico de barras verticais com barras de erro com limites variados.
É possível utilizar a mesma lógica para barras de erro no eixo x
, utilizando o parâmetro xerr
ao invés de yerrr
, com a diferença de que é necessário especificar todos os valores. Alguns exemplos:
std_x = [0.1, 0.2, 0.3, 0.4, 1]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, xerr=std_x)
plt.show()
Figura 5 - Gráfico de barras verticais com barras de erro no sentido do eixo x
.
std_x = [[0.1, 0.2, 0.3, 0.4, 1],[0.4, 0.4, 0.4, 0.4, .4]]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, xerr=std_x)
plt.show()
Figura 6 - Gráfico de barras verticais com barras de erro no sentido do eixo x
.
Cor da barra de erro
Para alterar a cor da barra de erro, basta passar uma str
ou uma sequência de str
com o(s) nome(s) das cores desejadas através do parâmetro ecolor
.
Exemplo:
std_y = [0.5, 0.6, 0.1, 0.2, 1]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=std_y, ecolor='m')
plt.show()
Figura 7 - Gráfico de barras verticais com barras de erro na cor magenta.
cor_barra_erro = ['g', 'm', 'b', 'k', 'y']
std_y = [0.5, 0.6, 0.1, 0.2, 1]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=std_y, ecolor=cor_barra_erro)
plt.show()
Figura 8 - Gráfico de barras verticais com barras de erro com cores variadas.
Cap
É possível adicionar uma barrinha nas extremidades da barra de erro, o que é muito comum de ser observado neste tipo apresentação do erro. Para adicionar esta barra, basta passar um número (float
) através do parâmetro capsize
.
Exemplo:
std_y = [0.5, 0.6, 0.1, 0.2, 1]
espessuras = [0.5, .7, 0.8, 0.3, -0.2]
espessura_borda = [1, 2, 3, 4, 5]
cores = ['r', 'g', 'k', 'w', 'y']
cores_borda = ['g', 'm', 'k', 'y', 'b']
inicio = [0, 1, 2, 3, 4,]
plt.figure(figsize=(8,6))
plt.bar(frutas, precos, width=espessuras, align='edge', bottom=inicio, color=cores, edgecolor=cores_borda,
linewidth=espessura_borda, yerr=std_y, ecolor='m', capsize=5)
plt.show()