1
resposta

[Dúvida] with plt.style.use('fivethirtyeight'):

Tentei usar o estilo 'fivethirtyeight' com o 'with', mas me deu esse erro aqui:

o código:

with plt.style.use('fivethirtyeight'):
    fig, ax = plt.subplots(figsize=(8,4))
    ax.plot(dados_brasil['ano'], dados_brasil['imigrantes'], lw=3)
    ax.set_title('Imigração do Brasil para o Canadá\n1980 a 2013', fontsize=18, loc='left')
    ax.set_xlabel('Ano', fontsize=14)
    ax.set_ylabel('Número de imigrantes', fontsize=14)
    ax.xaxis.set_tick_params(labelsize=12)
    ax.yaxis.set_tick_params(labelsize=12)
    ax.xaxis.set_major_locator(plt.MultipleLocator(5))
    plt.grid(linestyle='--')
    plt.show()

o erro:

{
    "name": "TypeError",
    "message": "'NoneType' object does not support the context manager protocol",
    "stack": "---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[76], line 1
----> 1 with plt.style.use('fivethirtyeight'):
      2     fig, ax = plt.subplots(figsize=(8,4))
      3     ax.plot(dados_brasil['ano'], dados_brasil['imigrantes'], lw=3)

TypeError: 'NoneType' object does not support the context manager protocol"
}

Fiquei em dúvida de como usar o estilo com o 'with', tem algo diferente que eu deva fazer? Obrigada!

1 resposta

Oi Luana, tudo bem?

O erro ocorreu porque plt.style.use() não é um gerenciador de contexto, ou seja, ele não pode ser usado com with. Para aplicar um estilo apenas a um bloco específico de código, você deve usar plt.style.context(), que é o gerenciador de contexto correto para esse propósito.

Segue o código:

with plt.style.context('fivethirtyeight'):
    fig, ax = plt.subplots(figsize=(8,4))
    ax.plot(dados_brasil['ano'], dados_brasil['imigrantes'], lw=3)
    ax.set_title('Imigração do Brasil para o Canadá\n1980 a 2013', fontsize=18, loc='left')
    ax.set_xlabel('Ano', fontsize=14)
    ax.set_ylabel('Número de imigrantes', fontsize=14)
    ax.xaxis.set_tick_params(labelsize=12)
    ax.yaxis.set_tick_params(labelsize=12)
    ax.xaxis.set_major_locator(plt.MultipleLocator(5))
    plt.grid(linestyle='--')
    plt.show()

Dessa forma, o estilo 'fivethirtyeight' será aplicado apenas dentro do bloco with, e você não terá problemas com o erro de NoneType.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado