Figura 3-2. Um gráfico de barra simples
Um gráfico de barra também pode ser uma boa escolha para criar gráficos de
histogramas de valores numéricos carregados, a fim de explorar visualmente
como os valores são
distribuídos, como na Figura 3-3:
grades = [83,95,91,87,70,0,85,82,100,67,73,77,0]
decile = lambda grade: grade // 10 * 10
histogram = Counter(decile(grade) for grade in grades)
plt.bar([x - 4 for x in histogram.keys()],
# move cada barra para a esquerda em 4
histogram.values(),
# dá para cada barra sua altura correta
8)
# dá para cada barra a largura de 8
plt.axis([-5, 105, 0, 5])
# eixo x de –5 até 105,
# eixo y de 0 até 5
plt.xticks([10 * i for i in range(11)])
# rótulos do eixo x em 0, 10, …, 100
plt.xlabel("Decil")
plt.ylabel("# de Alunos")
plt.title("Distribuição das Notas do Teste 1")
plt.show()
Figura 3-3. Usando um gráfico de barra para um histograma
O terceiro argumento para
plt.bar
especifica a largura da barra. Aqui, escolhemos
a largura 8 (o que deixa um espaço pequeno entre as barras, já
que nosso
agrupamento possui o tamanho 10). Andamos com a barra em 4, para que (por
exemplo) a barra “80” tenha seu lado esquerdo e direito em 76 e 84, e (portanto)
seu centro em 80.
A chamada para
plt.axis
indica que queremos que o eixo x varie entre –5 até 105
(para que as barras “0” e “100” sejam mostradas por completo), e que o eixo y
deveria variar de 0 até 5. A chamada para
plt.xticks
coloca os rótulos
do eixo x em
0, 10, 20, …, 100.
Seja criterioso quando usar
plt.axis()
. Ao criar gráficos de barra, não começar o
eixo y em 0 é considerado ruim, já que essa é uma maneira fácil
de enganar as
pessoas (Figura 3-4):
mentions = [500, 505]
years = [2013, 2014]
plt.bar([2012.6, 2013.6], mentions, 0.8)
plt.xticks(years)
plt.ylabel("# de vezes que ouvimos alguém dizer 'data science'")
# se você não fizer isso, matplotlib nomeará o eixo x de 0, 1
# e então adiciona a +2.013e3 para fora do canto (matplotlib feio!)
plt.ticklabel_format(useOffset=False)
# enganar o eixo y mostra apenas a parte acima de 500
plt.axis([2012.5,2014.5,499,506])
plt.title("Olhe o "Grande" Aumento!")
plt.show()
Figura 3-4. Um gráfico com um eixo y enganador
Na Figura 3-5,
usamos eixos mais sensatos e, agora, parece menos
impressionante:
plt.axis([2012.5,2014.5,0,550])
plt.title("Não Tão Grande Agora")
plt.show()