1
resposta

Erro no código ao plotar gráficos

A versão do seaborn recomendada no curso não está mais disponível para utilização no colab, portanto, estou utilizando a versão Name: seaborn Version: 0.11.1.

Alguns gráficos não estão funcionando, acredito que devido a versão do seaborn e o tipo da variável. Como resolvo?


# visualizando o gráfico salvo na variável
porcentagem_conta_linha.get_figure()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-82-f620f8d2c30b> in <module>()
      1 # visualizando o gráfico salvo na variável, ao invés do armazenado em memória
----> 2 porcentagem_conta_linha.get_figure()
      3 
      4 #não funcionou

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

sns.lineplot(x = "valor_da_conta", y = "porcentagem", dados = gorjetas)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-83-11134bc84e09> in <module>()
      1 # qual a progressão estamos tendo? gráfico que traça uma linha para mostrar a progressão
----> 2 sns.lineplot(x = "valor_da_conta", y = "porcentagem", dados = gorjetas)

5 frames
/usr/local/lib/python3.7/dist-packages/seaborn/_core.py in _assign_variables_longform(self, data, **kwargs)
    900 
    901                 err = f"Could not interpret value `{val}` for parameter `{key}`"
--> 902                 raise ValueError(err)
    903 
    904             else:

ValueError: Could not interpret value `valor_da_conta` for parameter `x`
sns.catplot(x = 'sobremesa', y = 'valor_da_conta', data = 'gorjetas')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-86-0346718e23f7> in <module>()
----> 1 sns.catplot(x = 'sobremesa', y = 'valor_da_conta', data = 'gorjetas')

2 frames
/usr/local/lib/python3.7/dist-packages/seaborn/categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units)
    142             # See if we need to get variables from `data`
    143             if data is not None:
--> 144                 x = data.get(x, x)
    145                 y = data.get(y, y)
    146                 hue = data.get(hue, hue)

AttributeError: 'str' object has no attribute 'get'
sns.relplot(x = 'valor_da_conta', y = 'gorjeta', hue = 'sobremesa', data = 'gorjetas')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-87-f4353a9afe5a> in <module>()
----> 1 sns.relplot(x = 'valor_da_conta', y = 'gorjeta', hue = 'sobremesa', data = 'gorjetas')

5 frames
/usr/local/lib/python3.7/dist-packages/seaborn/_core.py in _assign_variables_longform(self, data, **kwargs)
    900 
    901                 err = f"Could not interpret value `{val}` for parameter `{key}`"
--> 902                 raise ValueError(err)
    903 
    904             else:

ValueError: Could not interpret value `valor_da_conta` for parameter `x`
1 resposta

Olá Herica! Tudo bem com você?

Peço desculpas pela demora em dar um retorno.

Você trouxe aqui 4 erros diferentes, vamos analisar cada um deles.

1 - Primeiro erro:

Esse erro ocorre porque o relplot é um método que retorna gráficos do tipo "FacetGrid" e figuras desse tipo, não possuem o método get_figure().

O professor utiliza esse método para plotar os gráficos e para salvar as figuras. No entanto, como os gráficos do tipo FacetGrid não possuem o get_figure, para salvar uma figura você pode fazer o seguinte:

porcentagem_conta_linha = sns.relplot(
    data = gorjetas,
    x = 'valor_da_conta',
    y = 'porcentagem',
    kind = 'line'
)
porcentagem_conta_linha.savefig('porcentagem_conta_linha.png')

E para plotar essa figura, basta fazer:

porcentagem_conta_linha = sns.relplot(
    data = gorjetas,
    x = 'valor_da_conta',
    y = 'porcentagem',
    kind = 'line'
)

Que ela já deve aparecer na tela normalmente.

Observação: essa forma de salvar a figura no seaborn funciona apenas para métodos que retornem objetos do tipo "FacetGrid" (relplot, lmplot), entretanto, para métodos que retornam gráficos do tipo "matplotlib.axes.Axes" (scatterplot, lineplot), o método get_figure() funciona normalmente e deve ser utilizado para salvar as figuras conforme ensinado no curso.

2 - Segundo erro:

Esse erro está acontecendo porque ao passar os parâmetros para sua função, ao invés de escrever "data" você escreveu "dados", observe:

sns.lineplot(x = "valor_da_conta", y = "porcentagem", dados = gorjetas)

O correto seria:

sns.lineplot(x = "valor_da_conta", y = "porcentagem", data = gorjetas)

3 - Terceiro e quarto erros:

Os dois últimos erros acontecem porque ao passar o parâmetro "data" para seus métodos você colocou o nome do dataframe gorjetas entre aspas:

# gráfico do terceiro erro apresentado
sns.catplot(x = 'sobremesa', y = 'valor_da_conta', data = 'gorjetas')

# gráfico do quarto erro apresentado
sns.relplot(x = 'valor_da_conta', y = 'gorjeta', hue = 'sobremesa', data = 'gorjetas')

O correto seria:

sns.catplot(x = 'sobremesa', y = 'valor_da_conta', data = gorjetas)
sns.relplot(x = 'valor_da_conta', y = 'gorjeta', hue = 'sobremesa', data = gorjetas)

Espero que tenha te ajudado! Qualquer dúvida estarei por aqui :)

Bons estudos!