1
resposta

[Sugestão] Erro: AttributeError: 'NoneType' object has no attribute 'xaxis'

O código sugerido apresentava o erro: AttributeError: 'NoneType' object has no attribute 'xaxis'

A única forma que consegui rodar sem erro foi conforme segue:

import matplotlib.dates as mdates

def grafico_vendas_sp_tri():

    import matplotlib.pyplot as plt


    fig, ax = plt.subplots(figsize=(14,4))


    pontos_a_marcar = [True if mes == 12 else False for mes in df_sp["data_pedido"].dt.month]

    ax.plot(df_sp["data_pedido"], df_sp["vendas"], lw = 3, color = AZUL5, marker = "o", markersize = 10, markerfacecolor = AZUL2, markevery =  pontos_a_marcar)

    ax.set_title('Vendas por trimestre no estado de São Paulo', fontsize = 18, color = CINZA1, loc='left')
    ax.text(0.3, 0.95, "De 2016 a 2019 (em milhares de reais)", transform=ax.transAxes, color= CINZA2, fontsize=12, ha='right', va='center')
    ax.set_xlabel('')
    ax.set_ylabel('')
    ax.set_yticklabels([])
    ax.set_frame_on(False)
    ax.xaxis.set_tick_params(labelsize=14, labelcolor = CINZA2)

    ax.tick_params(axis='both', which='both', length=0)

    ## Ajustes no eixo x
    # Definindo o intervalo em trimestres e colocando os nomes dos meses nos labels
    ax.xaxis.set_major_locator(mdates.MonthLocator(interval = 3))
    ax.xaxis.set_major_formatter(mdates.DateFormatter("%b"))
    x_labels = ["Mar", "Jun", "Set", "Dez"] * 4
    ax.set_xticks(df_sp.data_pedido)
    ax.set_xticklabels(x_labels, ha = "center")

    # # Ajustando o eixo x colocando um nível acima de granularidade por meio da exibição do ano
    texto = [16*" " + str(i) + 16*" " for i in range(2016, 2020)]
    ax.text(ax.get_xbound()[0] + 35, - 80, f'|{texto[0]}|{texto[1]}|{texto[2]}|{texto[3]}|', fontsize=14, color=CINZA2)

    # # Destacando os valores do 4º trimestre
    ano = 0
    for i in range(3, len(df_sp["vendas"]), 4):
      ax.text(x = ax.get_xticks()[i], y = df_sp["vendas"][i] + 20, s = f"R$ {df_sp['vendas'][i]} mil", color = AZUL2, weight = "bold", fontsize = 10)
      ax.text(x = ax.get_xticks()[i] + 160, y = df_sp["vendas"][i] + 20, s = f"(4º Tri {2016 + ano})", color = CINZA2, weight = "bold", fontsize = 10)
      ano +=1

    fig = ax.get_figure()

grafico_vendas_sp_tri()
1 resposta

Oii, Matheus! Como você está?

Agradeço por compartilhar sua sugestão com a comunidade! Fico feliz que tenha encontrado uma solução para o erro que estava tendo no código! E sempre lembre de executar todas as células do notebook para que os códigos contidos nela possam ser executados e inicializados certinho. Continue se dedicando aos estudos e caso tenha dúvidas, compartilhe conosco para podermos te auxiliar.

Bons estudos, Matheus!