Olá, German! Tudo bem?
Acredito que esse erro tenha surgido, pois você está criando as linhas com plt.plot()
.
Quando você chama plt.plot()
, ele retorna uma lista de objetos de linha (Line2D) e reatribui essa lista à variável ax
. Portanto, ax
deixa de ser uma referência ao objeto de eixo original e passa a ser uma lista de objetos de linha. Isso resulta no erro quando você tenta acessar ax.xaxis, pois uma lista não tem um atributo xaxis
.
Neste caso, você pode criar a figura com a biblioteca seaborn e acertar os ticks do eixo X com o seguinte código:
sns.set_theme()
sns.set_palette('Dark2')
fig, ax = plt.subplots(figsize=(10, 5))
ax = sns.lineplot(df.loc['Brasil', anos], label='Brasil', lw=3)
ax = sns.lineplot(df.loc['Argentina', anos], label='Argentina', lw=3)
ax = sns.lineplot(df.loc['Peru', anos], label='Peru', lw=3)
ax = sns.lineplot(df.loc['Colômbia', anos], label='Colômbia', lw=3)
ax.set_title('Imigração dos maiores países da América do Sul\npara o Canadá de 1980 a 2013', loc='left', fontsize=20)
ax.set_xlabel('Ano', fontsize=14)
ax.set_ylabel('Número de imigrantes', fontsize=14)
ax.xaxis.set_major_locator(plt.MultipleLocator(5))
ax.legend(title='Países', loc='upper right', bbox_to_anchor=(1.18, 1.02))
plt.show()
O sns.lineplot()
retorna diretamente a referência ao objeto de eixo no qual o gráfico é desenhado. Ao atribuir essa referência a ax
, você mantém a variável ax
como uma referência válida ao objeto de eixo. Portanto, as chamadas subsequentes, como ax.xaxis.set_major_locator()
, funcionam corretamente, pois ax
continua sendo uma referência ao eixo original.
Se ainda restar alguma dúvida, não hesite em perguntar!
Ótimos estudos :)