1
resposta

[Dúvida] Dúvida de como funciona o for

Olá, eu sou o Guilherme. Eu fiquei com uma dúvida neste for abaixo:

fig = plt.figure(figsize=(8,5))
eixo = fig.add_axes([0,0,1,1])

cores = ['red', 'blue', 'orange', 'green']

caixas = eixo.boxplot(df.drop('espécie', axis=1).values, patch_artist=True)
eixo.set_title('Gráfico de caixa', fontsize=15, pad=10)
eixo.set_xticklabels(df.drop('espécie', axis=1).columns)

for caixa, cor in zip(caixas['boxes'], cores):
    caixa.set(color=cor)

Eu entendi seu propósito, mas não ententi os seguintes pontos:

  1. Os dois parâmetros "caixa, cor" estão juntos para percorrerem os loops do for juntos?
  2. O que essa função zip tá fazendo?
  3. Esse caixa.set seria a mesma coisa que eu fizesse eixo.boxplot(df.drop('espécie', axis=1).values, patch_artist=True).set(color = cor), em que a espécie fosse atualizada no loop do for?

Se puderem dar uma explicação geral passando por esses pontos, acho que vai ajudar muito. Obrigado desde já.

1 resposta

Olá, Guilherme! Vamos entender o código e responder suas dúvidas ponto a ponto.

Compreendendo o código

O código cria um gráfico de caixa (boxplot) usando a biblioteca Matplotlib. Aqui está um passo a passo de cada parte:

  1. Criar uma figura e um eixo:

    fig = plt.figure(figsize=(8,5))
    eixo = fig.add_axes([0,0,1,1])
    

    Isso cria uma figura (fig) com tamanho 8x5 polegadas e adiciona um eixo (eixo) que ocupa toda a área da figura.

  2. Definir as cores:

    cores = ['red', 'blue', 'orange', 'green']
    
  3. Criar o boxplot:

    caixas = eixo.boxplot(df.drop('espécie', axis=1).values, patch_artist=True)
    

    Aqui, é criado um boxplot para os dados do DataFrame df (sem a coluna 'espécie'). A opção patch_artist=True permite preencher as caixas com cor.

  4. Definir título e rótulos do eixo x:

    eixo.set_title('Gráfico de caixa', fontsize=15, pad=10)
    eixo.set_xticklabels(df.drop('espécie', axis=1).columns)
    

Explicação do loop for

Vamos agora para o loop for:

for caixa, cor in zip(caixas['boxes'], cores):
    caixa.set(color=cor)

1. Parâmetros "caixa, cor"

Sim, caixa e cor estão juntos para percorrerem os loops do for juntos. O que isso significa é que, para cada iteração do loop, caixa será uma das caixas do boxplot e cor será uma das cores da lista cores.

2. Função zip

A função zip combina duas (ou mais) listas elemento por elemento. No seu caso, ela cria pares (tuplas) de elementos das listas caixas['boxes'] e cores.

Exemplo simplificado:

caixas = ['caixa1', 'caixa2', 'caixa3', 'caixa4']
cores = ['red', 'blue', 'orange', 'green']

for caixa, cor in zip(caixas, cores):
    print(caixa, cor)

Saída:

caixa1 red
caixa2 blue
caixa3 orange
caixa4 green

Isso permite que você percorra duas listas simultaneamente dentro de um único loop for.

3. Método caixa.set

No loop, caixa.set(color=cor) está configurando a cor da linha da borda da caixa (a cor do contorno da caixa). O método set de um objeto Line2D do Matplotlib é usado para definir várias propriedades ao mesmo tempo.

Não é exatamente o mesmo que:

eixo.boxplot(df.drop('espécie', axis=1).values, patch_artist=True).set(color=cor)

Porque essa última linha tentaria criar um novo boxplot e aplicar uma cor a todo o boxplot, o que não funcionaria como esperado. O loop for está iterando sobre cada caixa individualmente e definindo a cor da borda de cada uma.

Explicação Geral

  1. Criar um gráfico de caixa que visualize os dados numéricos do DataFrame, exceto a coluna 'espécie'.
  2. Adicionar um título e rótulos aos eixos para melhorar a legibilidade do gráfico.
  3. Percorrer cada caixa no gráfico e aplicar uma cor diferente a cada uma usando o loop for e a função zip para iterar sobre as caixas e cores simultaneamente.
  4. Modificar as propriedades das caixas individualmente, neste caso, ajustando a cor da borda de cada caixa.

Espero que isso tenha esclarecido suas dúvidas! Se precisar de mais alguma coisa, é só falar.