2
respostas

O que eu deveria fazer para tornar esse código "pythônico"?

Eu fiz dessa maneira:

fig, axs = plt.subplots(2, 6, figsize=(40,4))
fig.subplots_adjust(hspace=0.5)

n=0
for i in range(2):
  for j in range(6):
    axs[i][j].plot(america_do_sul.columns[:-1], america_do_sul.values[n][:-1])
    axs[i][j].xaxis.set_major_locator(plt.MultipleLocator(5))
    axs[i][j].set_title(f'{america_do_sul.index[n]}')
    axs[i][j].grid()
    n += 1
plt.show()

Resultou em:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade O que acham que eu poderia melhorar? Poderia fazer de alguma maneira sem fazer iteração de n=0 e n += 1?

2 respostas

Aprimorei, mas o que mais posso melhorar?

fig, axs = plt.subplots(2, 6, figsize=(40,4))
fig.suptitle(
    "Total de imigrantes da América do Sul \nao Canadá de 1980 até 2013",
    fontsize='x-large')
fig.subplots_adjust(hspace=0.5, top=0.8)

n=0
for i in range(2):
  for j in range(6):
    axs[i][j].plot(america_do_sul.columns[:-1], america_do_sul.values[n][:-1])
    axs[i][j].xaxis.set_major_locator(plt.MultipleLocator(5))
    axs[i][j].set_title(f'{america_do_sul.index[n]}')
    axs[i][j].grid()
    n += 1
plt.savefig(fname="Imigrantes_AdS_1980_2013.png", format='png')
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oiiee, tudo bem?

Uma forma de deixar o código mais limpo e eficiente, reduzindo repetições e melhorando a legibilidade, seria essa:

paises = ['Brasil', 'Colômbia', 'Argentina', 'Peru']
ymin, ymax = 0, 7000

fig, axs = plt.subplots(2, 2, figsize=(10, 6))
fig.subplots_adjust(hspace=0.5, wspace=0.3)
fig.suptitle('Imigração dos quatro maiores países da América do Sul para o Canadá de 1980 a 2013')

for ax, pais in zip(axs.flat, paises):
    ax.plot(df.loc[pais, anos])
    ax.set_title(pais)
    ax.set_xlabel('Ano')
    ax.set_ylabel('Número de imigrantes')
    ax.set_ylim(ymin, ymax)
    ax.xaxis.set_major_locator(plt.MultipleLocator(5))

plt.show()

Otimizações realizadas:

  1. Loop Unificado: Combinei os loops em um único loop para configuração de título, etiquetas e limites do eixo. Isso reduz a repetição de código e facilita as modificações futuras.
  2. Iteração Direta: Usei o zip para iterar diretamente sobre os eixos (axs.flat) e os países. Isso elimina a necessidade de indexação explícita, tornando o código mais claro e menos propenso a erros.
  3. Definição de Variáveis Comuns: Movi as configurações comuns de xlabel, ylabel, ylim, e o localizador do eixo x para dentro do loop, garantindo que cada subplot seja ajustado adequadamente sem repetir código fora do loop.

Esse código mantém toda a funcionalidade do original, mas com uma abordagem mais enxuta e fácil de manter.

Qualquer dúvida, não existe em perguntar!

Bons estudos :)