3
respostas

SNS não plota títulos nem labels + dúvidas

Olá, boa tarde!

Tenho utilizado o VsCode + Extensões Python e Jupyter da Microsoft para acompanhar as aulas, e até o momento tenho tido resultados iguais aos da aula.

Acontece que no momento da aula de distribuição de frequências, em que o professor Rodrigo vai plotar o histograma (2min35s), a instrução escrita é:

ax = sns.displot(dados['Altura'], kde = False)
ax.figure.set_size_inches(12, 6)
ax.set_title('Distribuição de Frequências - Altura', fontsize = 18)

No VsCode, ao tentar inserir o título, o intellisense completa com set_titles, com um s ao final. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Acontece que:
  1. Se deixar com o 's' no final, a célula roda, mas o título não é exibido;

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

2. Se deixar como na aula, a execução retorna o erro:

AttributeError: 'FacetGrid' object has no attribute 'set_title'

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

  1. Testei no Collab, e roda exatamente da forma que o professor rodou na aula: Insira aqui a descrição dessa imagem para ajudar na acessibilidade
  2. Estou na dúvida se pode ser a versão da lib Seaborn, que na minha venv está com a versão '0.12.2' e no Collab com '0.11.2'.

Mas ainda assim, consultando a documentação da versão atual, consta como set_titles. Insira aqui a descrição dessa imagem para ajudar na acessibilidade




Fiquei confuso, e não sei se é versão, se é o fato de eu estar usando no VsCode, alguém pode me ajudar?

Obs.: Vi em outro tópico aqui no fórum em que a instrutora Milena ensina um meio alternativo usando o plt.title(). Eu testei e funcionou, mas a curiosidade em saber o motivo de não estar funcionando com o sns me motivou a criar este tópico. Mais uma vez, obrigado a quem puder ajudar!

3 respostas

Na emoção postei a dúvida, antes de procurar um pouco mais. Acabei achando um outro post sobre isso .

A instrução foi:

ax = sns.displot(dados.Altura, kde = False) 
ax.figure.set_size_inches(12,6) 
ax.set(title ="Distribuição de Frequências - Altura", xlabel='Metros') 
ax

Mas aí me surgiu outra dúvida: Com essa forma, como alteramos o tamanho da fonte?

No StackOverflow achei uma solução que funcionou, mas o título ficou em cima da área do histograma, aí fica feio.

ax.fig.suptitle('Distribuição de Frequências - Altura', fontsize =18)

Enquanto a solução usando o plt.title() me parece funcionar melhor, ainda que com a sensação de estar fazendo gambiarra kkkkkk

Galera, descobri o porque do erro com o set_title e set_titles.

Erro besta, de falta de atenção de um principiante. Até tentei apagar o post, mas não rola essa feature aqui no fórum. :P

Eu estava usando no meu script o displot (objeto FacetGrid) ao invés do disTplot (objeto Axes), e querendo que atributos de um funcionassem no outro.

Veja mais sobre as diferenças dos objetos na documentação.

Vamos lá:

A função usada pelo professor em aula é a seaborn.disTplot (com T), que se tornou obsoleta a partir da versão v0.11.0, conforme o post do autor em 14/05/2022 no github.

O uso dela, fará com que se gere o seguinte Warning:

UserWarning: 

`distplot` is a deprecated function and will be removed in seaborn v0.14.0.

Please adapt your code to use either `displot` (a figure-level function with
similar flexibility) or `histplot` (an axes-level function for histograms).

For a guide to updating your code to use the new functions, please see
https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751

O uso dessa função deve ser substituído por displot (sem o t) ou histplot, e até onde entendi, o resultado visual de ambas são idênticos (até porque o displot usa o histplot por debaixo dos panos), mudando apenas o tipo de objeto que cada uma gera, sendo FacetGrid para o displot e Axes para o histplot.

O autor até pediu perdão pela confusão que se gera com nomes tão parecidos para as funções:

Why replace it with a nearly identically named functions?

Yeah, this is obviously not ideal. It was totally foreseeable that people would get tripped up by distplot/displot, and I apologize for that (except to the person who sent me a long, very rude email about it). I put a lot of effort into thinking of a better name, but ultimately came up empty.

Conclusão

Eu estava usando a nova função sem perceber, e querendo usar os métodos da função já obsoleta, e por isso a confusão.

Fica a lição de casa agora aprender mais sobre os tipos de objetos que cada plot gera, e tentar sanar mais as dúvidas que surgiram. XD hahahah

Como não pude apagar o post e evitar de pagar mico pela confusão que fiz, espero que fique de ajuda para quem tiver o mesmo tipo de problema posteriormente.

Sugestão:

Fica a sugestão para o time da Alura validar, se não é melhor atualizar o conteúdo do curso para se adequar as versões mais recentes das bibliotecas

Oi, Rafael, tudo bem?

Desculpe a demora em te responder!

Fico feliz que tenha encontrado a resposta para o problema que estava enfrentando. Muito obrigado por compartilhá-la com a comunidade do fórum. Tenho certeza que vai ajudar os demais estudantes que estão aprendendo este assunto.

Além disso, agradecemos seu feedback sobre atualizar o curso, ele é muito importante para aperfeiçoar os nossos conteúdos e levar experiências repletas de aprendizagens para nossas alunas e alunos. Ele será direcionado para o pessoal responsável.

Continue mergulhando em seus estudos e caso tenha dúvidas, não hesite em postar aqui no fórum.

Abraços e bons estudos!