1
resposta

Como modificar os ticks em uma figura com mais de uma linha?

Estou fazendo o desafio da aula de Seaborn, e quando tento modificar os xticks para que fiquem de 5 em 5 na figura que tem 4 linhas, a função ax.xaxis.setmajorlocator(plt.MultipleLocator(5)) retorna um erro. Nesse caso, como eu faço para modificar os ticks do eixo X?

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

1 resposta

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 :)